如果 Tcp 侦听器不可用,则 Tcpclient 连接冻结

本文关键字:Tcpclient 连接 冻结 Tcp 侦听器 如果 | 更新日期: 2023-09-27 18:37:01

我试过了

    Connectionclient.ReceiveTimeout = 10000;
    Connectionclient.Connect("127.0.0.1", 10072);

如果 TcpListener 正在运行,它工作正常。但是如果 TcpListener 没有运行,我的 tcpclient 会在捕获异常之前冻结自己 1 秒。同时,我的连接信息也被冻结了。

我只是想像所有在线游戏一样制作登录屏幕。

那么,我

该如何解决这个问题,或者我应该去阅读什么来找到我自己的解决方案。

如果 Tcp 侦听器不可用,则 Tcpclient 连接冻结

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";
    }
}