求助 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)
{



}

}



...全文
844 4 点赞 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lescper2011 2017-11-07
多线程处理,强制关闭就结束这个线程,链接其他的用户
  • 打赏
  • 举报
回复
xinyu_hong 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长度的数据,所以要判断一下
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
加入

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2017-11-06 05:06
社区公告

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