vb.net - 如何解决套接字接受超时
问题描述
我有一个电源开关设备来控制。如果设备连接到网络,我的代码可以正常工作。我故意从网络中删除设备以测试它,就好像设备出现故障(如断电)。我发现系统挂起。
我跟踪到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
我该如何解决这个问题?
解决方案
我使用 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
推荐阅读
- javascript - 在重置按钮上单击如何重置绘图管理器?
- java - spring如何在mongoDB中查询过滤
- flutter - Flutter 在 Stack 小部件中显示 2 小部件
- sql - 如何创建触发器以发送电子邮件
- c# - c#中的并行任务性能
- javascript - 如何将应用程序状态保存到 cookie
- xml - 如何在 Android Studio 中创建可滚动的线性布局?
- azure - Graph Api 响应中的 nextLink 不是绝对 Uri
- c# - Http Utility '在当前上下文中不存在(API 帮助)
- python - 对多个 CSV 中的值求和 python