【问题标题】:Tcpclient connection freeze if Tcplistener is not available如果 Tcplistener 不可用,则 Tcpclient 连接冻结
【发布时间】:2013-10-28 13:22:49
【问题描述】:

我试过了

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

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

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

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

【问题讨论】:

    标签: c# .net xna tcpclient tcplistener


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 2017-08-17
      • 1970-01-01
      相关资源
      最近更新 更多