我试过了
Connectionclient.ReceiveTimeout = 10000;
Connectionclient.Connect("127.0.0.1", 10072);
如果TcpListener正在运行,它可以正常工作。 但是如果TcpListener没有运行,我的tcpclient会在捕获异常之前冻结1秒。 同时,我的连接信息也被冻结了。
我只是想像所有在线游戏一样制作登录屏幕。
那么,我该如何解决这个问题,或者我应该阅读什么来找到解决方案呢?
答案 0 :(得分:4)
TcpClient.Connect
方法是同步,因此阻塞调用线程,直到连接操作成功完成或出错。
如果调用线程恰好是拥有窗口句柄的线程,则窗口将显示无响应。
为了解决您的问题,您可以使用同步连接方法的异步对应方法,该方法将在单独的工作线程上执行连接操作。
labelConnectionState.Text = "Connecting";
Connectionclient.BeginConnect("..", 43594, ConnectCallback, Connectionclient);
...
private static void ConnectCallback(IAsyncResult asyncResult)
{
try
{
TcpClient Connectionclient = (TcpClient) asyncResult.AsyncState;
Connectionclient.EndConnect(asyncResult);
labelConnectionState.Text = "Connected";
}
catch (SocketException socketException)
{
labelConnectionState.Text = "Server unavailable";
}
}