452
Chương 11: Lập trình mạng
8.
8.
Giao ti p b ng TCP
ế ằ
Giao ti p b ng TCP
ế ằ
Bạn cần gửi dữ liệu giữa hai máy tính trên một network bằng kết nối TCP/IP.
Một máy tính (server) phải lắng nghe bằng lớp
System.Net.Sockets.TcpListener
.
Mỗi khi một kết nối được thiết lập, cả hai máy tính đều có thể giao tiếp bằng lớp
System.Net.Sockets.TcpListener
.
TCP là một giao thức đáng tin cậy dựa-trên-kết-nối, cho phép hai máy tính giao tiếp thông qua
một network. Để tạo một kết nối TCP, một máy tính phải đóng vai trò là server và bắt đầu
lắng nghe trên một endpoint cụ thể (endpoint được định nghĩa là một địa chỉ IP, cho biết máy
tính và số port). Một máy tính khác phải đóng vai trò là client và gửi một yêu cầu kết nối đến
endpoint mà máy tính thứ nhất đang lắng nghe trên đó. Một khi kết nối được thiết lập, hai máy
tính có thể trao đổi các thông điệp với nhau. Cả hai máy tính chỉ đơn giản đọc/ghi từ một
System.Net.Sockets.NetworkStream
.
Mặc dù một kết nối TCP luôn cần có một server và một client, nhưng không lý
do gì một ứng dụng không thể là cả hai. Ví dụ, trong một ứng dụng peer-to-peer,
một tiểu trình được sử dụng lắng nghe các yêu cầu đến (đóng vai trò là một
server) trong khi một tiểu trình khác được sử dụng để khởi tạo các kết nối đi
(đóng vai trò là một client). Trong ví dụ đi kèm mục này, client và server là các
ứng dụng riêng rẽ và được đặt trong các thư mục con riêng.
Một khi kết nối TCP được thiết lập, hai máy tính có thể gửi bất kỳ kiểu dữ liệu nào bằng cách
ghi dữ liệu đó ra
NetworkStream
. Tuy nhiên, ý tưởng hay là bắt đầu thiết kế một ứng dụng
mạng bằng cách định nghĩa giao thức mức-ứng-dụng mà client và server sẽ sử dụng để giao
tiếp. Giao thức này chứa các hằng mô tả các lệnh được phép, bảo đảm mã lệnh của ứng dụng
không chứa các chuỗi giao tiếp được viết cứng.
namespace SharedComponent {
public class ServerMessages {
public const string AcknowledgeOK = "OK";
public const string AcknowledgeCancel = "Cancel";
public const string Disconnect = "Bye";
}
public class ClientMessages {
public const string RequestConnect = "Hello";
public const string Disconnect = "Bye";
}
}