我有一个使用异步套接字编写的服务器。在接受新连接的那篇文章中,我遇到了一个问题,一些用户说,当客户端尝试重新连接到服务器时,他们有时会在服务器上得到这个错误:
连接尝试失败,原因是连接方在一段时间后未正确响应,或者已建立的连接失败,因为连接的主机未能响应
在此错误发生后,服务器停止工作,并且没有新的客户端可以连接,直到我物理地退出服务器程序并重新启动它。那么当我得到这个错误的时候我应该怎么做呢?我试图在我的代码中通过关闭套接字(listener.Close())重新启动服务器,然后调用我在开始时用来创建和绑定到套接字的相同代码,但随后我得到一个错误,指出我无法再次绑定到相同的端口。
所以,有两个问题。首先,什么是正确的方法来处理这个错误,并防止它从根本上杀死我的服务器?接下来,通过我的代码重启服务器的正确方法是什么?在这种情况下,仅仅在侦听器上调用.close(),然后重新启动它是行不通的。
谢谢
下面是接受连接请求的代码
私有子connectionRequest(ByVal ar As IAsyncResult)
Try
Dim thisListener As Socket = CType(ar.AsyncState, Socket)
Dim handler As Socket = thisListener.EndAccept(ar)
Dim remoteEndPoint As IPEndPoint
remoteEndPoint = handler.RemoteEndPoint
thisListener.Listen(10)
thisListener.BeginAccept(New AsyncCallback(AddressOf connectionRequest), thisListener)
thisListener.NoDelay = True
thisListener.Ttl = 32
Dim state As New StateObject
state.workSocket = handler
handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, New AsyncCallback(AddressOf dataArrival), state)
handler.NoDelay = True
Catch ex As Exception
End Try
End Sub发布于 2010-11-02 16:22:33
你能给我们展示一下你接受连接的代码吗?
您应该不必重新启动服务器。您只需修复服务器中接受代码中的错误即可。
当服务器不能足够快地接受连接,和/或如果侦听积压队列对于正在建立的新连接和服务器正在接受它们的速率来说太短时,客户端可能并且将会遇到这个问题。
https://stackoverflow.com/questions/4072736
复制相似问题