453
Chương 11: Lập trình mạng
Trong ví dụ này, bảng từ vựng được định nghĩa sẵn chỉ là cơ bản. Bạn có thể thêm nhiều hằng
hơn nữa tùy thuộc vào kiểu ứng dụng. Ví dụ, trong một ứng dụng truyền file, client có thể gửi
một thông điệp để yêu cầu một file. Sau đó, server có thể đáp lại bằng một acknowledgment
(ACK) và trả về các chi tiết của file (kích thước file chẳng hạn). Những hằng này sẽ được biên
dịch thành một Class Library Assembly riêng, và cả client và server đều phải tham chiếu đến
assembly này.
Đoạn mã dưới đây là một khuôn dạng cho một TCP-server cơ bản. Nó lắng nghe trên một port
cố định, nhận kết nối đến đầu tiên và rồi đợi client yêu cầu ngừng kết nối. Tại thời điểm này,
server có thể gọi phương thức
TcpListener.AcceptTcpClient
lần nữa để đợi client kế tiếp.
Nhưng thay vào đó, nó sẽ đóng lại.
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using SharedComponent;
public class TcpServerTest {
private static void Main() {
// Tạo listener trên port 8000.
TcpListener listener =
new TcpListener(IPAddress.Parse("127.0.0.1"), 8000);
Console.WriteLine("About to initialize port.");
listener.Start();
Console.WriteLine("Listening for a connection...");
try {
// Đợi yêu cầu kết nối, và trả về TcpClient.
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Connection accepted.");
// Thu lấy network stream.
NetworkStream stream = client.GetStream();
// Tạo BinaryWriter để ghi ra stream.
BinaryWriter w = new BinaryWriter(stream);