Có cách nào, sử dụng C#, để xác định xem một cổng có khả dụng không? Tôi muốn kiểm tra trước khi tôi khởi động bản sao WCF ServiceHost bằng cách sử dụng cổng đã được sử dụng :-)Xác định xem cổng có đang được sử dụng không?
Trả lời
Bạn không thể xác định xem có cổng nào không. Bạn chỉ có thể xác định
- đó bạn có quyền kiểm soát của một cổng
- Đó một cổng đã có sẵn tại một số điểm trong quá khứ
Trừ khi bạn kiểm soát các cổng bằng việc có một ổ cắm đặc biệt ràng buộc và lắng nghe trên cổng, nó có thể cho một quá trình khác để đi cùng và kiểm soát của cảng.
Cách duy nhất đáng tin cậy để biết liệu cổng có sẵn là cố gắng lắng nghe trên đó hay không. Nếu bạn thành công thì cổng có sẵn và bạn có quyền kiểm soát. Nếu không, bạn biết rằng tại một số thời điểm trong quá khứ và có khả năng hiện tại, cảng đã được kiểm soát bởi một pháp nhân khác.
Đối với In C#, how to check if a TCP port is available?, tôi nghĩ rằng áp phích ban đầu không thực sự chắc chắn nếu anh ấy nói về khách hàng hoặc máy chủ, vì vậy cũng có câu trả lời là về khách hàng muốn kết nối hoặc máy chủ muốn nghe trên cổng.
Câu trả lời của JaredPar là chính xác (nhiều hơn thế này!) Mặc dù đôi khi có thể bất tiện.
Nếu bạn là hợp lý chắc chắn rằng không có máy chủ khác đang grabbing các cổng mà bạn chỉ cần kiểm tra (hoặc không quan tâm cho sự thất bại thỉnh thoảng), bạn có thể thử (từ http://www.codeproject.com/Tips/268108/Find-the-open-port-on-a-machine-using-Csharp?msg=4176410#xx4176410xx, tương tự như https://stackoverflow.com/a/570461/586754):
public static int GetOpenPort(int startPort = 2555)
{
int portStartIndex = startPort;
int count = 99;
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
IPEndPoint[] tcpEndPoints = properties.GetActiveTcpListeners();
List<int> usedPorts = tcpEndPoints.Select(p => p.Port).ToList<int>();
int unusedPort = 0;
unusedPort = Enumerable.Range(portStartIndex, 99).Where(port => !usedPorts.Contains(port)).FirstOrDefault();
return unusedPort;
}
- 1. Xác định xem tệp có đang được sử dụng trong Perl trên Windows
- 2. Cách xác định xem một cổng có được mở trên máy chủ Windows không?
- 3. Cách tốt nhất để xác định cổng ứng dụng đang sử dụng là gì?
- 4. Xác định tệp đang được sử dụng bởi FileHandler
- 5. Làm cách nào để xác định quy trình nào đang sử dụng cổng nối tiếp?
- 6. Xác định xem trang hiện tại có đang sử dụng SSL trong Rails
- 7. Xác định xem STDERR có đang đến terminal
- 8. Cách tạo cổng TCP kết nối bằng cách sử dụng C đến cổng được xác định trước
- 9. Cách xác định cổng ứng dụng iperf
- 10. Cách phát hiện xem MemoryMappedFile có đang sử dụng không
- 11. Xác định xem ứng dụng có đang chạy trong xanh hay không
- 12. Ruby - Kiểm tra xem cổng có đang mở
- 13. Xác định xem mô-đun Magento có được bật không
- 14. Kiểm tra xem cổng có đang mở trong ANT
- 15. Cách xác định cổng tcp được Windows sử dụng trong C#
- 16. Xác định xem tham số có sử dụng "params" sử dụng phản chiếu trong C# không?
- 17. Có cách nào để chỉ định cổng cục bộ được sử dụng trong tcpClient không?
- 18. Xác định xem WindowServer có khả dụng không?
- 19. Xác định xem ứng dụng có bị chặn/bận không?
- 20. Cách dễ nhất để xác định xem người dùng có đang sử dụng thiết bị di động hay không
- 21. Cách xác định xem CKEditor có được tải không?
- 22. Xác định rubygem nào bạn đang sử dụng
- 23. Kiểm tra xem tệp có đang được sử dụng hay ứng dụng nào không?
- 24. Xác định xem ASP.Net có được đăng ký đúng cách
- 25. Miền tạo Asadmin không thành công: tất cả các cổng đang được sử dụng
- 26. Xác định xem cổng nối tiếp có bình thường là COM hay SPP
- 27. Có thể lập trình xác định xem video có đang phát không?
- 28. Xác định xem phương pháp ActionScript có được gọi là sử dụng siêu
- 29. Làm cách nào để xác định xem một ô được trả về bởi dequeueReusableCellWithIdentifier có đang được sử dụng lại trong iOS 6 không?
- 30. xác định xem mã có đang chạy trên thời gian chạy của ứng dụng (Java)