《如何处理服务器或客户端socket断开》由会员分享,可在线阅读,更多相关《如何处理服务器或客户端socket断开(10页珍藏版)》请在人人文库网上搜索。

1、编程经验谈 如何处理socket连接后服务器端或Socket编程经验谈-如何处理socket连接后服务器端或客户端的断开(转)2010年12月29日星期三14:50现象:服务器端等待客户断连接,当socket连接建立后,如果客户端异常断开,服务器会抛出异常,从而导致程序运行中断目标:希望服务器一直等待连接,客户端中断后程序不退出,而客户端重新恢复后可以继续保持连接代码:public class Receivepublic static byte buffer=new byte1024;public static ManualResetEvent socketEvent=new ManualRe。

2、setEvent(false);public static Socket sListener=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);public static Socket handler=null;public static string ClientBroken=An connection was forcibly closed by the remote host;public static void receive()tryConsole.WriteLine(Main Thre。

3、adID:+AppDomain.GetCurrentThreadId();byte bytes=new byte1024;IPAddress ipAddr=IPAddress.Parse(127.0.0.1);int Port=10001;IPEndPoint EPServer=new IPEndPoint(ipAddr,Port);/Binding asocket sListener.Bind(EPServer);/Start listening sListener.Listen(10);while(true)if(handler=null)/first must make aconnect。

4、 Console.WriteLine(waiting for aconnection.);/asychronous function for accepting connections sListener.BeginAccept(new AsyncCallback(AcceptCallback),sListener);socketEvent.WaitOne();handler.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),handler);socketEvent.WaitOne();elseCo。

5、nsole.WriteLine(waiting next message.);socketEvent.Reset();handler.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),handler);socketEvent.WaitOne();Console.ReadLine();catch(Exception e)Console.WriteLine(e.ToString();Console.ReadLine();public static void AcceptCallback(IAsyncRe。

6、sult ar)tryConsole.WriteLine(AcceptCallback Thread ID:+AppDomain.GetCurrentThreadId();Socket listener=(Socket)ar.AsyncState;/new socket handler=listener.EndAccept(ar);handler.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),handler);catch(Exception e)Console.WriteLine(e.ToStr。

7、ing();public static void ReceiveCallback(IAsyncResult ar)string err_message=null;tryConsole.WriteLine(ReceiveCallback Thread ID:+AppDomain.GetCurrentThreadId();string content=String.Empty;handler=(Socket)ar.AsyncState;int bytesRead=handler.EndReceive(ar);/if there is some data.if(bytesRead 0)/append。

8、 it to the main string content+=Encoding.ASCII.GetString(buffer,0,bytesRead);/if we encounter the end of message character if(content.IndexOf(char)3)-1|content.IndexOf(char)16)-1)Console.WriteLine(Read+content.Length+bytes from socket.n Data:+content);socketEvent.Set();else/otherwise receive the rem。

9、aining data handler.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),handler);catch(Exception e)err_message=e.Message;if(err_message.IndexOf(An existing connection was forcibly closed by the remote host)-1)Console.WriteLine(An existing connection was forcibly closed by the re。

10、mote host);/handler.Shutdown(SocketShutdown.Both);/handler.Close();Console.WriteLine(waiting for aconnection.);/asychronous function for accepting connections sListener.BeginAccept(new AsyncCallback(AcceptCallback),sListener);elseConsole.WriteLine(e.ToString();说明:关键在于最后这段的异常处理,接收中断后,服务器端重新等待接收。现象:客户。

11、端与服务器连接,当socket连接建立后,如果服务器端异常断开,客户端会抛出异常,从而导致程序运行中断目标:希望客户端出现提示,服务器端中断后程序不退出,而服务器端重新恢复后可以继续保持连接代码:public class AsyncCommpublic static string theResponse=;public static byte buffer=new byte1024;public static ManualResetEvent socketEvent=new ManualResetEvent(false);public static Socket sClient=new Soc。

12、ket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);public static IPEndPoint EPServer=new IPEndPoint(IPAddress.Parse(127.0.0.1),10001);public static void send(string data)byte byteData=null;byteData=Encoding.ASCII.GetBytes(data);tryif(!sClient.Connected)Console.WriteLine(System.DateTi。

13、me.Now.ToString(yyyy-MM-dd HH:mm:ss:ffff)+Connect begining.);sClient.BeginConnect(EPServer,new AsyncCallback(ConnectCallback),sClient);socketEvent.WaitOne();sClient.BeginSend(byteData,0,byteData.Length,0,new AsyncCallback(SendCallback),sClient);socketEvent.WaitOne();catch(Exception e)Console.WriteLi。

14、ne(Server side is broken.);socketEvent.Reset();return;public static void ConnectCallback(IAsyncResult ar)tryThread thr=Thread.CurrentThread;Console.WriteLine(ConnectCallback Thread State:+AppDomain.GetCurrentThreadId();Socket sClient=(Socket)ar.AsyncState;sClient.EndConnect(ar);Console.WriteLine(Soc。

15、ket connected to+sClient.RemoteEndPoint.ToString();socketEvent.Set();catch(Exception ex)Console.WriteLine(System.DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss:ffff)+|+AppDomain.GetCurrentThreadId()+|3-Level 3Server connection is broken,waiting for Level 3Server connection.);sClient=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);socketEvent.Set();receive函数相同,可以参照写出说明:在每次发送或接收时检测当前socket是否连接,如果没有连接,就启动连接,并阻塞线程等待ConnectCallback的返回。

修改客户端 与服务器断开,如何处理服务器或客户端socket断开相关推荐

  1. (C# TCP异步)客户端异常断开,服务器利用KeepAlive监测

    (C# TCP异步)客户端异常断开,服务器利用KeepAlive监测 参考文章: (1)(C# TCP异步)客户端异常断开,服务器利用KeepAlive监测 (2)https://www.cnblog ...

  2. 天正服务器不显示,天正软件客户端修改服务器地址

    天正软件客户端修改服务器地址 内容精选 换一换 如果IP经过NAT/WAF,则只能获取到NAT/WAF转化后的IP地址,无法获取到NAT/WAF前的IP地址.如果客户端为容器,只能获取到容器所在主机的 ...

  3. cas 修改服务器ip,Cas 服务器 Service(Cas客户端)注册信息维护

    作为Cas服务器,允许哪些客户端接入与否是通过配置来定义的.对Cas服务器来说,每一个接入的客户端与一个Service配置对应:在Cas服务器启动时加载并注册上这些Service,与之对应的客户端才能 ...

  4. sqlserver2008链接服务器的使用和oracle11g客户端修改字符集

    1.服务器对象-链接服务器-访问接口-(OracleDB.Oracle)属性-允许进程内 2.运行-regedit-HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE-NIS_LAN ...

  5. 多个客户端如何同时连接到服务器上的一个端口(例如80)? [重复]

    本文翻译自:How do multiple clients connect simultaneously to one port, say 80, on a server? [duplicate] T ...

  6. bs客户端跨服务器管理文件,bs架构客户端和服务器

    bs架构客户端和服务器 内容精选 换一换 SSL(安全套接层,Secure Sockets Layer)是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障.云容器实例支持上传SSL证书,在使 ...

  7. 华为服务器修改管理网口,怎么设置华为服务器管理口

    怎么设置华为服务器管理口 内容精选 换一换 本章节介绍如何通过控制台重启服务器.重启服务器时,可以批量更换云手机镜像.重启服务器会造成云手机断开连接,请提前保存数据.登录管理控制台.在管理控制台左上角 ...

  8. 修改服务器超时时间,服务器超时时间设置

    服务器超时时间设置 内容精选 换一换 在压测过程中能够提供自身性能数据的施压目标机器.管理执行机的节点.CPTS为用户的测试工程提供管理能力,事务.压测任务.测试报告的内容在同一个测试工程内共享复用, ...

  9. 逆战网络连接断开连接服务器超时_逆战服务器连接断开 与服务器连接断开的原因...

    今天小编为大家带来了逆战服务器连接断开 与服务器连接断开的原因,感兴趣的朋友们可以跟着小编去下文了解一下哦! 很多玩家都碰到过这种问题,大多都是腾讯的TP安全防卫提示的这个消息,大家大可不必着急,出现 ...

最新文章

  1. [python教程入门学习]Python是什么?
  2. Java黑皮书课后题第2章:*2.17(科学:风寒温度)外面有多冷?...twc=35.74+0.6215ta-35.75v0.16+0.4275tav0.16,输入度数、风速显示风寒温度
  3. oracle loder nextval,ORA-07445: 出现异常错误: 核心转储
  4. 目标检测的图像特征提取—Haar特征
  5. oracle怎么通过sid确定表名,如何获取Oracle的SID列表
  6. Java多线程:线程休眠
  7. 虚拟机安装Mac系统
  8. 数据库上机练习-1-建表
  9. android App下载与安装
  10. uniapp:微信小程序地图功能
  11. ubuntu 虚拟机复制粘贴文件(文本) windows
  12. 云班课使用浏览器倍速播放插件
  13. Bzoj2037 [Sdoi2008]Sue的小球
  14. springboot 自定义starter类
  15. 汽车自动变速器的共性技术
  16. 你知道腾讯程序员一年写多少代码嘛?
  17. 大数字加法(C语言实现)
  18. 【MySQL】在MySQL中如何给表起别名
  19. 获取微信聊天窗口的小程序入口参数
  20. jsp_02JSP隐含对象

热门文章

  1. JAVA毕设项目社区电商平台系统(java+VUE+Mybatis+Maven+Mysql)
  2. 如何查看计算机硬盘的软件内存条,内存检测工具,内存检测软件 - 内存条检测工具就用金山卫士 - 安全专题...
  3. 无线充电动牙刷PCBA单片机方案牙刷无线充底座IC芯片
  4. 如何打开计算机无线功能灰色,计算机没有wifi,仅显示宽带连接. 右键单击灰色的无线网络连接图...
  5. 有借必有贷,借贷必相等
  6. Unity 涂涂乐(不使用shader)
  7. POJ 2125 Destroying The Graph Acwing 2325. 有向图破坏(拆点+最小权点覆盖集)
  8. 计算机死机后 通过任务管理器关闭程序,电脑死机后,按哪个键结束程序
  9. 支付宝新人专享福利有哪些?支付宝新人专属红包、支付宝新人专区
  10. IPFS技术系列之IPFS底层基础