socket连接中如何检测到远程的客户端socket已断线

时间:2021-08-27 06:28:07
我用C#做了一个socket的服务端程序,启动一个线程监听tcp某端口的客户端连接,
如果有连接则新建一线程新生成一个socket负责和客户端通信,可是当客户端断线
或关闭socket时,我如何能够监测到。
注:采用线程池的方式把每一个服务socket都放进去;
    用TextReader和TextWriter类进行数据的接收和传输;
    数据的接收和传输采用同步阻塞方法。
    已用try catch作错误处理,但是当远端断开时,不能检测到错误。
请教???

6 个解决方案

#1


假如你服务器和客户端都是在C#下完成的话,某一端掉线会向另一端传送一个字符数为0的串,你用
   int bytes = socket.receive(buffer);
   if (bytes==0)
{
}
就行,不过一般测试网络连接是由客户端每搁1秒发送一个特定字符串,服务器接受后,再原样返回。

#2


要看你的程序怎么写的。
对每一个连接用户启动线程,绝对使用Socket,其有一属性Alive还是Connected的忘记了,这样搞定。

我以前写了个玩玩的。。不过程序拿不出来:))

公司能POST的机器只有一台,与开发区的机器“隔离”的!!,没有办法:(

#3


回复皮皮:int bytes = socket.receive(buffer);,好像不行
         当客户端掉线时,此行不往下执行,不知道为什么?
回复人: aspcn(飞刀) ,代码根本就不返回,在
         reader.read(buffer,0,1024)下加断点,当远端断开时,根本
         就不触发断点,真的挠头?
谁来救我!!!!!!!!!!!

#4


所以你的每秒从客户端传一个字符组给SERVER,然后由SERVER返回嘛!
银行系统都是这样做的

#5


怎么能这样做,判断是否连结咋是这样子。

我的程序是拿不出来。

给你看看这个吧。

http://www.codeproject.com/dotnet/dotnetTCP.asp

#6


多谢二位,多谢飞刀,望以后多多赐教
接分

#1


假如你服务器和客户端都是在C#下完成的话,某一端掉线会向另一端传送一个字符数为0的串,你用
   int bytes = socket.receive(buffer);
   if (bytes==0)
{
}
就行,不过一般测试网络连接是由客户端每搁1秒发送一个特定字符串,服务器接受后,再原样返回。

#2


要看你的程序怎么写的。
对每一个连接用户启动线程,绝对使用Socket,其有一属性Alive还是Connected的忘记了,这样搞定。

我以前写了个玩玩的。。不过程序拿不出来:))

公司能POST的机器只有一台,与开发区的机器“隔离”的!!,没有办法:(

#3


回复皮皮:int bytes = socket.receive(buffer);,好像不行
         当客户端掉线时,此行不往下执行,不知道为什么?
回复人: aspcn(飞刀) ,代码根本就不返回,在
         reader.read(buffer,0,1024)下加断点,当远端断开时,根本
         就不触发断点,真的挠头?
谁来救我!!!!!!!!!!!

#4


所以你的每秒从客户端传一个字符组给SERVER,然后由SERVER返回嘛!
银行系统都是这样做的

#5


怎么能这样做,判断是否连结咋是这样子。

我的程序是拿不出来。

给你看看这个吧。

http://www.codeproject.com/dotnet/dotnetTCP.asp

#6


多谢二位,多谢飞刀,望以后多多赐教
接分