首页 > 解决方案 > 如何解决套接字接受超时

问题描述

我有一个电源开关设备来控制。如果设备连接到网络,我的代码可以正常工作。我故意从网络中删除设备以测试它,就好像设备出现故障(如断电)。我发现系统挂起。

我跟踪到socket.accept不执行 - 'accept is ok' 没有写入日志文件。 ex.message也不写。

我的目的是在出现任何设备故障时向支持人员发送消息。

    Using gSocket As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
        WriteLog("Start. ")
        Dim remoteSocket As Socket
        
        Try
            gSocket.SendTimeout = 5000
            gSocket.ReceiveTimeout = 5000
            gSocket.Bind(vEndPoint) ' vEndpoint is the local machine
            WriteLog("bind is ok. ")
            gSocket.Listen(10)
            WriteLog("listen is ok. ")
            remoteSocket = gSocket.Accept
            WriteLog("accept is ok. ")


        Catch ex As Exception
            WriteLog(ex.Message)
            
        Finally

        End Try

我该如何解决这个问题?

标签: vb.netsocketssocket-timeout-exception

解决方案


我使用 BeginAccept 来解决它。

            Dim acceptResult As IAsyncResult = gSocket.BeginAccept(Nothing, Nothing)
            Dim Success As Boolean = acceptResult.AsyncWaitHandle.WaitOne(vTimeout, True)
            If Success Then
                remoteSocket = gSocket.EndAccept(acceptResult)
                WriteLog("beginaccept is ok. ")
            Else
                gSocket.Close()                   
                WriteLog("beginaccept failed. ")                    
            End If

推荐阅读