CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 460

460
Chương 11: Lập trình mạng

cung cấp thuộc tính

Socket

, nhưng khả năng truy xuất của nó là

protected

, nghĩa là bạn

không thể truy xuất nó một cách trực tiếp. Thay vào đó, bạn phải dẫn xuất một lớp mới từ

TcpListener

:

public class CustomTcpListener : TcpListener {

public Socket Socket {

get {return base.Server;}

}

public CustomTcpListener(IPAddress ip, int port) : base(ip, port) {}

}

Bây giờ, bạn có thể sử dụng lớp này khi tạo một

TcpListener

. Ví dụ dưới đây sử dụng cách

tiếp cận này để thiết lập một tùy chọn socket:

CustomTcpListener listener =

new CustomTcpListener(IPAddress.Parse("127.0.0.1"), 8000);

listener.Socket.SetSocketOption(SocketOptionLevel.Socket,

SocketOptionName.ReceiveTimeout, 1000);

// (Sử dụng CustomTcpListener giống như đã sử dụng TcpListener.)

11.

11.

T o m t TCP-server h -tr -đa-ti u-trình

ạ ộ

ỗ ợ

T o m t TCP-server h -tr -đa-ti u-trình

ạ ộ

ỗ ợ

Bạn muốn tạo một TCP-server có thể cùng lúc xử lý nhiều TCP-client.

Sử dụng phương thức

AcceptTcpClient

của lớp

TcpListener

. Mỗi khi có một

client mới kết nối đến, khởi chạy một tiểu trình mới để xử lý yêu cầu và gọi

TcpListener.AcceptTcpClient

lần nữa.

Một endpoint TCP (địa chỉ IP và port) có thể phục vụ nhiều kết nối. Thực ra, hệ điều hành
đảm đương phần lớn công việc giùm bạn. Những gì bạn cần làm là tạo một đối tượng thợ
(worker object) trên server để xử lý mỗi kết nối trong một tiểu trình riêng.
Xét lớp TCP-client TCP-server đã được trình bày trong mục 11.8. Bạn có thể dễ dàng
chuyển server này thành một server hỗ-trợ-đa-tiểu-trình để thực hiện nhiều kết nối cùng một
lúc. Trước hết, tạo một lớp để tương tác với một client:

using System;

using System.Net;

using System.Net.Sockets;

using System.IO;

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.