【发布时间】:2019-06-19 07:18:39
【问题描述】:
我的 tcp 服务器被“Close_Waits”挂起。我需要一个示例程序来处理来自客户端的持久连接。
我尝试过捕获异常,然后关闭捕获中的套接字。但没有运气!
protected virtual void ReceiveCallBack(IAsyncResult result)
{
var wrapper = (ConnectedSocketWrapper)result.AsyncState;
try
{
int bytesRead = 0;
bytesRead = wrapper.ConnectedSocket.EndReceive(result);
LogInfo("Byte Read" + bytesRead.ToString());
if (bytesRead > 0)
{
LogInfo("inside Byte Read > 0 : " + bytesRead.ToString());
byte[] dataRead = wrapper.Buffer.Take(bytesRead).ToArray();
wrapper.ConnectedSocket.BeginReceive(wrapper.Buffer, 0, this.configuration.BytesToReceiveInReadOperation, SocketFlags.None, this.ReceiveCallBack, wrapper);
DataReceivedByServer dataReceived = new DataReceivedByServer(wrapper.Token, dataRead);
EventDispatcher.RaiseEvent(dataReceived);
if (DataReceived != null)
{
DataReceived(this, new DataReceivedEventArgs(dataRead, wrapper.Token));
}
}
else
{
EventDispatcher.RaiseEvent(new ClientDisconnected(wrapper.Token, "Read 0 bytes (client disconnected gracefully)", wrapper.ConnectedSocket.RemoteEndPoint.ToString()));
LogInfo("inside Byte Read = 0 : " + bytesRead.ToString());
Close(wrapper.ConnectedSocket);
Socket removeSocket;
connectedSockets.TryRemove(wrapper.Token, out removeSocket);
}
}
catch
{
Close(wrapper.ConnectedSocket);
throw;
}
}
我需要一个可以无缝处理请求的空闲 TCP 服务器。
【问题讨论】:
-
你遇到了哪个异常?
-
我没有遇到任何异常。客户端无法连接,在wireshark上我确实看到所有客户端尝试的重置。
标签: c# tcp server persistent