不显示删除回复显示所有回复显示星级回复显示得分回复 C# socket异步回调函数处理?
来源:互联网 发布:手机网络赚钱项目 编辑:程序博客网 时间:2024/04/30 05:17
- private static Dictionary<string, Socket> clicentSocket = new Dictionary<string, Socket>();//保存客户端SocketThread clientwork = new Thread(new ThreadStart(ClientWorkRece));//开启一个线程用于处理所有客户端数据 clientwork.Start(); public static void ClientWorkRece() { while (true) { List<string> ipList = new List<string>();//用于存放客户端计算机IP foreach (Socket client in clicentSocket.Values) { StateObject state = new StateObject(); state.workSocket = client; try { client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ClientReadCallback), state); } catch (SocketException) { //其他处理..... string ip = ((IPEndPoint)client.RemoteEndPoint).Address.ToString();//获取远程计算机IP ipList.Add(ip);//将断开的计算机放入list中 } } for (int i = 0; i < ipList .Count; i++) { //其他处理.... clicentSocket[ipList[i]].Shutdown(SocketShutdown.Both); clicentSocket[ipList[i]].Close(); clicentSocket.Remove(ipList[i]);//将此计算机移除 Console.WriteLine("客户端断开!" + listen); } Thread.Sleep(1); } } //获取客户端信息的回调函数 public static void ClientReadCallback(IAsyncResult ar) { StateObject state = (StateObject)ar.AsyncState; Socket handler = state.workSocket; try { int recData = handler.EndReceive(ar); string ip = ((IPEndPoint)handler.RemoteEndPoint).Address.ToString();//获取远程计算机IP try { if (recData > 0)//有数据 { //数据处理 } } catch (SocketException err) { Console.WriteLine("Socket异常:"+err.ToString()); Console.WriteLine(clicentSocket.Count.ToString()); } }问题在于当客户端断开后,回调函数总是报异常:好像是对象已经被释放,我的理解是当客户端断开后,应该在client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ClientReadCallback), state);就会出现异常,程序运行也是这样,而且也捕获了异常的,而且之后我也在下面的代码中Close了客户端。但为什么回调函数还要执行,使其出现异常:对象已经被释放!请问回调函数应该怎么处理啊?还是在其他地方处理啊?我的目的是要只启动一个线程,维持所有客户端连接!
- private static Dictionary<string, Socket> clicentSocket = new Dictionary<string, Socket>();//保存客户端SocketThread clientwork = new Thread(new ThreadStart(ClientWorkRece));//开启一个线程用于处理所有客户端数据 clientwork.Start(); public static void ClientWorkRece() { while (true) { List<string> ipList = new List<string>();//用于存放客户端计算机IP foreach (Socket client in clicentSocket.Values) { StateObject state = new StateObject(); state.workSocket = client; try { client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ClientReadCallback), state); } catch (SocketException) { //其他处理..... string ip = ((IPEndPoint)client.RemoteEndPoint).Address.ToString();//获取远程计算机IP ipList.Add(ip);//将断开的计算机放入list中 } } for (int i = 0; i < ipList .Count; i++) { //其他处理.... clicentSocket[ipList[i]].Shutdown(SocketShutdown.Both); clicentSocket[ipList[i]].Close(); clicentSocket.Remove(ipList[i]);//将此计算机移除 Console.WriteLine("客户端断开!" + listen); } Thread.Sleep(1); } } //获取客户端信息的回调函数 public static void ClientReadCallback(IAsyncResult ar) { StateObject state = (StateObject)ar.AsyncState; Socket handler = state.workSocket; try { int recData = handler.EndReceive(ar); string ip = ((IPEndPoint)handler.RemoteEndPoint).Address.ToString();//获取远程计算机IP try { if (recData > 0)//有数据 { //数据处理 } } catch (SocketException err) { Console.WriteLine("Socket异常:"+err.ToString()); Console.WriteLine(clicentSocket.Count.ToString()); } }问题在于当客户端断开后,回调函数总是报异常:好像是对象已经被释放,我的理解是当客户端断开后,应该在client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ClientReadCallback), state);就会出现异常,程序运行也是这样,而且也捕获了异常的,而且之后我也在下面的代码中Close了客户端。但为什么回调函数还要执行,使其出现异常:对象已经被释放!请问回调函数应该怎么处理啊?还是在其他地方处理啊?我的目的是要只启动一个线程,维持所有客户端连接!
- 不显示删除回复显示所有回复显示星级回复显示得分回复 C# socket异步回调函数处理?
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 有损脑健康的七种坏习惯
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 汇编常用知识整理
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 老中医的顺口溜----很实用
- 不显示删除回复显示所有回复显示星级回复显示得分回复 sql server 2000 为什么不能新建表
- 不显示删除回复显示所有回复显示星级回复显示得分回复 Java接口,抽象类,内部类
- 不显示删除回复显示所有回复显示星级回复显示得分回复 POI "读" word 图片、表格、纯文本
- 不显示删除回复显示所有回复显示星级回复显示得分回复 POI "读" word 图片、表格、纯文本
- 不显示删除回复显示所有回复显示星级回复显示得分回复 [推荐] win7的10个技巧
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 一个女linux工程师之路
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 自学的作用不可忽视
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 如何阻止多次弹框
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 php的简繁转换
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 有人看了第一句就哭了
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 C#中出现未能进入中断模式
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 ASP加javascript实现图片轮流显示(图片路径从数据库中读取)
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 js使字符串里面所有的数字执行+1操作
- GridView的删除确认
- 游戏炮打飞机设计——计算机达人成长之路(11)连载
- 不懂
- 新手
- 加入CSDN
- 不显示删除回复显示所有回复显示星级回复显示得分回复 C# socket异步回调函数处理?
- Android通过URL获取网络数据
- 如何学习嵌入式
- 兄弟姐妹们,多多指导!
- ASP.NET程序中常用的代码
- struts,
- 世界
- CentOS 5.5 安装 Wine 方法
- CentOS5.5 下的 YUM、软件包下载源及 Apache/MySQL/PHP 升级