各位大侠:
我刚用 C# 写Socket 代码,服务器端用异步监控客户端,代码如下
//开启服务器端监控---Begin
internal void MonitorClient()
{
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 端口号);
Socket serverSocket = new Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
try
{
serverSocket.Bind(ipep);
serverSocket.Listen(100);
serverSocket.BeginAccept(clientAcceptCallBack, serverSocket);
}
catch ( }
finally { } //serverSocket.Close(); serverSocket.Dispose();
}//End
//异步监听客户端连接---Begin
private void clientAcceptCallBack(IAsyncResult ar)
{
string IP = "";
try
{
Socket serverSocket = ar.AsyncState as Socket;
Socket clientSocket = serverSocket.EndAccept(ar); //结束异步Accept并获已连接的Socket
IPEndPoint ipEndPoint = (IPEndPoint)clientSocket.RemoteEndPoint; //可能在这里或上面两行出错
IP = ipEndPoint.Address.ToString() + ":" + ipEndPoint.Port.ToString();
ThreadPool.QueueUserWorkItem(new WaitCallback(acceptClientMsg), (object)IP); //收信息,并根据收到的信息执行相关操作
serverSocket.BeginAccept(clientAcceptCallBack, serverSocket); //继续异步Accept,保持Accept一直开启!
}
catch (Exception ex) { }
finally { }
}//End
在 clientAcceptCallBack 中偶尔会出现“远程主机关闭了一个现有连接”的错误,但出现次数少,没办法跟踪。
由于出现次数少,没有规律,目前还不知道具体是什么原因,没办法跟踪和解决。
有没有哪位高手知道是什么原因,或碰到过?