求助 Socket异常 出现“远程主机强迫关闭了一个现有的连接“

泛小白 2017-11-06 05:06:26
用SOCKET异步的方式接收客户端数据,结果运行老是出现“远程主机强制关闭一个现有的连接”的问题。 导致服务器异常 其他客户端连接不上。
分析应该是客户端异常断开导致 怎么处理这个异常不影响其他客户端连接呢?


private Socket _socket;

private void OnAccept(IAsyncResult ar)
{
try
{
Socket new_accept = _socket.EndAccept(ar); //新连接socket
ProxySocket proxy = GetProxy(new_accept); //创建代理socket

proxy.DisConnected += new DisConnectedEventHandler(proxy_DisConnected); //离线事件
proxy.MessageReceived += new MessageReceivedEventHandler(proxy_MessageReceived); //接收数据事件
proxy.StartReceive(); //代理socket开始接收数据

if (Connected != null)
{
Connected.BeginInvoke(proxy, null, null); //Connected事件
}


_socket.BeginAccept(new AsyncCallback(OnAccept), _socket); //开始下一次异步侦听
}
catch (Exception ex)
{



}

}



...全文
1223 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lescper2011 2017-11-07
  • 打赏
  • 举报
回复
多线程处理,强制关闭就结束这个线程,链接其他的用户
好大一地嗯 2017-11-07
  • 打赏
  • 举报
回复
“远程主机强制关闭一个现有的连接” 真的是另一端管别了 看下客户端是不是数据发送完就主动关闭了连接,TCP是需要有确定信息的,这种发送端无法确定数据是否被完整接受,不应该主动关闭。
k. 2017-11-07
  • 打赏
  • 举报
回复

 /// <summary>  
/// 接收消息
/// </summary>
/// <param name="clientSocket"></param>
private static void ReceiveMessage(object clientSocket)
{
Socket myClientSocket = (Socket)clientSocket;
while (true)
{
try
{
//通过clientSocket接收数据
int receiveNumber = myClientSocket.Receive(result);
Console.WriteLine("接收客户端{0}消息{1}", myClientSocket.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
myClientSocket.Shutdown(SocketShutdown.Both);
myClientSocket.Close();
break;
}
}
}
xdashewan 2017-11-07
  • 打赏
  • 举报
回复
断开时receive会接收到0长度的数据,所以要判断一下

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧