【问题标题】:Socket Beginconnect several times for the same socket while not connectedSocket Beginconnect 在未连接时为同一个套接字连接多次
【发布时间】:2018-09-22 21:25:03
【问题描述】:

我正在尝试使用 c# 中的异步套接字将客户端连接到服务器。

我在做socket.beginconnect尝试连接,重点是如果连接没有建立,我想尝试beginconnect,如果500ms后连接没有建立,我想尝试再说一遍,比如说 10 次。

我尝试了一个简单的 bucle,但它不起作用,因为在前一个完成之前我无法再次开始连接,但是当 beginconnect 完成并且找不到服务器时,它返回一个没有服务器的 expecion。

【问题讨论】:

    标签: c# visual-studio sockets client


    【解决方案1】:

    MSDN 文档说:

    要取消对 BeginConnect 方法的挂起调用,请关闭 Socket。 当在异步操作中调用 Close 方法时 进度,调用提供给 BeginConnect 方法的回调。 对 EndConnect 方法的后续调用将引发 ObjectDisposedException 表示操作已被 取消。

    所以每次都要创建一个新的Socket:

    public Socket TryConnect(...)
    {
        Socket socket;
    
        try
        {
            socket = new Socket(...);
            var connect = Task.Factory.FromAsync(
                socket.BeginConnect, socket.EndConnect, host, port, null);
    
            var isConnected = connect.Wait(TimeSpan.FromSeconds(0.5));
    
            if (!isConnected)
            {
                socket.Close();
                return null;
            }
    
            return socket;      
        }
        catch
        {
            if (socket != null)
            {
                socket.Dispose();
            }
            throw;
        }
    }
    
    
    for (var i = 0; i < 10; i++)
    {
        var socket = TryConnect();
        if (socket != null)
            return socket;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2017-10-23
      • 1970-01-01
      相关资源
      最近更新 更多