我在客户端 TCP/IP 应用程序中使用Socket类将客户端连接到服务器。
我有以下代码:
var endPoint = new IPEndPoint(IPAddress.Parse(IP), port);
var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
client.Connect(endPoint);
try
{
while (true)
{
// Do work...
// Receive/Send data from/to server
}
}
catch (SocketException)
{
/* At some point the server disconnects...
Exception catched because the server close the connection
Socket error 10054 - WSAECONNRESET */
// So I try to reconnect
if(client.Connected == false)
{
/* The following line throws a InvalidOperationException.
Message: After disconnecting the socket, you can reconnect only
asynchronously from a different EndPoint. BeginConnect must be
called on a thread that will not close until the operation completes.*/
client.Connect(endPoint);
/* So I try instead Socket.BeginConnect, but the following line
throws a SocketException 10061 - WSAECONNREFUSED */
client.BeginConnect(endPoint, ConnectCallback, client);
/* And also the following code throws a
SocketException 10061 - WSAECONNREFUSED */
client = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
client.Connect(endPoint);
}
}
这里列出了套接字错误。
所以,在某些时候服务器关闭连接,我需要知道什么是最好的方法来知道服务器何时准备好接受另一个连接以及如何再次连接到同一个端点。