我正在开发一个使用3个端口的服务器客户端应用程序[TCP SOCKET .Net 4.0] ..
因此,应用程序为用户提供了仅为主套接字设置端口的选择 . 但我想让服务器应用程序自动找到其他2个套接字的可用端口,以便使用主套接字连接将端口值发送到客户端 . 然后客户端使用接收的端口值连接到另一个套接字 .
这里有一点解释:
-
主套接字侦听可配置端口 . 此套接字接受客户端以启动发送/接收命令 . (file explorer/task manager/properties/shutdown/chat)
-
第二个套接字仅用于 file transfer 传输文件,并在完成后关闭 .
-
第三个套接字仅用于接收/发送 screenshot.
[我知道你可能会说我应该使用相同的套接字进行文件传输和截图,但它有点复杂 . 我只是为每一个使用单独的套接字 . ]
那么在将套接字与 endpoints 绑定之前,如何找到可用端口?这样的事情:
int port = 10000;
bool isAvailable = false;
while(!isAvailable)
{
try
{
// check if the port is available to use.
isAvailable = true;
}
catch
{
port++;
}
}
1 回答
如果端口号无关紧要,则可以将端口0传递给
IPEndPoint
. 在这种情况下,操作系统(TCP / IP堆栈)为您分配一个空闲端口号 .正如@GrokSrc在评论部分中指出的那样,当你使用
Dispose()
方法或using
语句完成套接字时,你当然应该处理套接字 .