奇怪的插座问题

时间:2010-11-01 20:20:37

标签: vb.net sockets

我有一个使用异步套接字编写的服务器。在接受新连接的部分中,我遇到了一个问题,其中一些用户说当客户端尝试重新连接到服务器时,他们有时会在服务器上收到此错误:

“连接尝试失败,因为连接方在一段时间后没有正确响应,或者由于连接主机无法响应而建立连接失败”

发生此错误后,服务器将停止运行,并且在我实际退出服务器程序并再次启动之前,没有新客户端可以连接。那么当我收到此错误时该怎么办?我尝试通过关闭套接字(listener.Close())然后调用我用来创建并在开始时绑定到套接字的相同代码来在我的代码中重启服务器,但后来我得到一个错误,说我可以再次绑定到同一个端口。

所以,两个问题。首先,处理该错误并防止它基本上杀死我的服务器的正确方法是什么?接下来,通过我的代码重启服务器的正确方法是什么?只需在侦听器上调用.close()然后再次启动它就不起作用。

谢谢

以下是接受连接请求的代码

Private Sub 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

1 个答案:

答案 0 :(得分:0)

您能告诉我们您接受连接的代码吗?

您不必重新启动服务器。您应该只修复服务器中接受代码中的错误。

当服务器不能足够快地接受连接时,和/或如果监听积压队列对于建立新连接的速率太短以及服务器正在接受它们时,客户端可以并且将会遇到此问题