相关疑难解决方法(0)

立即检测客户端与服务器套接字的断开连接

如何检测客户端是否与服务器断开连接?

我有下面的代码在我的AcceptCallBack方法

static Socket handler = null;
public static void AcceptCallback(IAsyncResult ar)
{
  //Accept incoming connection
  Socket listener = (Socket)ar.AsyncState;
  handler = listener.EndAccept(ar);
}
Run Code Online (Sandbox Code Playgroud)

我需要找到一种方法来尽快发现客户端已从handlerSocket 断开连接.

我试过了:

  1. handler.Available;
  2. handler.Send(new byte[1], 0, SocketFlags.None);
  3. handler.Receive(new byte[1], 0, SocketFlags.None);

当您连接到服务器并且想要检测服务器何时断开连接但是当您是服务器并且想要检测客户端断开连接时它们不起作用时,上述方法会起作用.

任何帮助将不胜感激.

.net c# sockets connection tcp

72
推荐指数
4
解决办法
14万
查看次数

如何检查客户端是否通过C++中的Winsock断开连接?

如何检查客户端是否通过C++中的Winsock断开连接?

c++ winsock

12
推荐指数
2
解决办法
3万
查看次数

在.NET中检测客户端断开连接的最佳做法?

我正在用C#开发一个服务器,它只能接受一个客户端,我需要知道这个客户端什么时候断开连接才能接受另一个连接请求.

我正在使用第一个Socket,它持续监听连接请求Socket.BeginAccept并接受或拒绝客户端.当接受客户端时,返回的新Socket Socket.EndAccept用于客户端和服务器之间的通信.然后,服务器等待来自客户端的命令Socket.Begin/EndReceive并发送响应.服务器使用类似Telnet的协议,这意味着每个命令和每行响应必须以\r\n.

为了检测客户端是否已断开连接,我安装了一个定时器,每500ms \r\n向客户端发送一条空消息(" ").如果客户端断开连接,则Socket会抛出异常.服务器捕获此异常,该服务器关闭当前会话并接受新连接.此解决方案是健壮的,但意味着网络上不需要的流量,必须由客户端正确处理,客户端必须在获得实际响应之前过滤虚拟消息.

我试图发送一个空缓冲区(Socket.Send(new byte[1], 0, 0)),但它似乎在方向server-> client中不起作用.

另一种解决方案可能是处理Socket.EndReceive返回0字节的情况.它适用于在"空闲"时间内发生断开连接的情况.但是,如果客户端在传输消息期间断开连接,则服务器并不总是看到它并无限期地等待.

我已经看到了关于这个问题的几个线索和问题,但我从未见过任何好的解决方案.

所以我的问题是:在.Net中检测断开连接的最佳方法是什么?

.net sockets tcp disconnect

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

.net ×2

sockets ×2

tcp ×2

c# ×1

c++ ×1

connection ×1

disconnect ×1

winsock ×1