TCP端口竞争状态
本文关键字:状态 竞争 TCP | 更新日期: 2023-09-27 17:50:16
我想多次启动我的程序,每个实例都试图用TCP连接到相同的服务器端口。我的意图是让第一个连接,其他客户端应该尝试连接到不同的端口。
我用下面的代码连接:
TcpClient tcp;
StreamReader streamReader;
StreamWriter streamWriter;
bool success=false;
while (!success) {
try
{
tcp = new TcpClient(Hostname, currentPort);
streamReader = new StreamReader(tcp.GetStream());
streamWriter = new StreamWriter(tcp.GetStream());
success=true;
} catch {
// wait a bit...
}
}
现在第一个将成功连接,但第二个没有得到异常,但也没有连接。如何确定程序是否真正连接?属性tcp。
当未真正连接时,connected属性有时会返回true。参见msdn TcpClient。连接:
由于已连接属性仅反映截至最近操作的连接状态,因此您应该尝试发送或接收消息以确定当前状态。消息发送失败后,此属性不再返回true。请注意,这种行为是经过设计的。您无法可靠地测试连接的状态,因为在测试和发送/接收之间的时间内,连接可能已经丢失。您的代码应该假设套接字已连接,并优雅地处理失败的传输
我建议您通过编程检查端口是否可用,而不是依赖于异常。
并且为了使它对您来说非常简单,因为您不能依赖于已连接标志,人们通常建议您使用在TcpClient中找到的模式。已连接: