我想多次启动程序,每个实例都尝试使用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属性不起作用。
答案 0 :(得分:0)
当连接属性没有真正连接时,它有时可以返回true。请参见msdn TcpClient.Connected:
由于Connected属性仅反映最近操作时的连接状态,因此您应尝试发送或接收消息以确定当前状态。消息发送失败后,此属性不再返回true。请注意,此行为是设计使然。您无法可靠地测试连接状态,因为在测试和发送/接收之间的时间内,连接可能已丢失。您的代码应该假定套接字已连接,并正常处理失败的传输
我建议您programaticaly check查看该端口是否可用,而不是依赖于例外。
为了让它变得非常简单,因为你不能依赖于Connected标志,人们通常建议你使用这里找到的模式TcpClient.Connected True, yet not connected: