2010-03-16 46 views
8

Tôi đang viết một thư viện máy chủ FTP (vì tôi cần nó và tôi không thể tìm thấy bất kỳ giải pháp tốt cho việc này) trong C# và tôi có hai câu hỏi:Tìm một cổng miễn phí

  • như thế nào IPEndPoint tìm một cổng miễn phí khi tôi làm new IPEndPoint(IPAddress.Any, 0), chẳng hạn?

  • Có thể tìm một cổng miễn phí từ một phạm vi (ví dụ: từ 1023 đến 65535), mà không cần phương thức GetActiveTcpConnections? Bởi vì nó chậm - tôi cần một cách nhanh hơn để làm điều này.

+1

bản sao có thể có của [Tìm cổng TCP tiếp theo trong. Net] (http://stackoverflow.com/questions/138043/find-the-next-tcp-port-in-net) –

Trả lời

13

Ngay khi bạn bắt đầu nghe trên cổng chưa được gán (0), nó sẽ được hệ điều hành (hoặc chính xác hơn là bởi ngăn xếp TCP/IP). Kể từ khi ngăn xếp quản lý tất cả các cổng, nó có thể gán một miễn phí.

Vì vậy, chỉ cần bắt đầu nghe kết nối của bạn và sau đó kiểm tra cổng trong thuộc tính LocalEndpoint để chuyển nó cho khách hàng. TcpListener documentation chứa nhiều thông tin hơn về điều này.

Nếu bạn cần tìm một kênh miễn phí trong một phạm vi, bạn chỉ cần lặp lại toàn bộ phạm vi và cố gắng bắt đầu nghe từng câu. Nếu bạn thành công, bạn tìm thấy một cổng miễn phí và bạn có thể thoát khỏi vòng lặp của mình; nếu không, chỉ cần tiếp tục với vòng lặp. Đây là cách đáng tin cậy duy nhất để làm điều đó bởi vì nếu không bạn có thể chạy vào điều kiện đua với các quy trình khác hoặc thậm chí là chuỗi của bạn mà cả hai đều đánh giá cùng một cổng miễn phí và đầu tiên sử dụng nó "thắng", trong khi mã khác sẽ không có thể sử dụng cổng.

Các vấn đề liên quan