1

当客户端通过读/写/接受操作断开连接时,会引发 SocketException 错误。

当抛出 SocketException 时,我很想了解有关该“客户端”套接字的详细信息——

即 Socket.RemoteEndPoint

有什么方法可以从 SocketException 对象中获取它?

我对从 BeginAccept/EndAccept 例程获取请求详细信息特别感兴趣。

private Socket _listeningSocket;
// _listeningSocket.Bind().Listen()._BeginAccept().etc

public static void _BeginAccept()
{
    _listeningSocket.BeginAccept(new new AsyncCallback(_EndAccept),null);
}

public static void _EndAccept(IAsyncResult ar)
{
    try
    {
        Socket acceptedSocket = _listeningSocket.EndAccept(ar);
        Process(acceptedSocket);
    }
    catch(SocketException se)
    {
        /////////////////////////////////////////////////
        // Who tried to connect to my _listeningSocket!!!
        /////////////////////////////////////////////////
    }
    finally
    {
        _BeginAccept()
    }
}
4

1 回答 1

0

我认为通过 SocketException 是不可能的。

但是如果你的 try-catch 设计得很好,那么从其他地方获取 Socket.RemoteEndPoint 并不难,比如你使用的 Socket 对象。

于 2009-10-15T07:46:53.540 回答