c#Socket遇到Receive阻断线程问题处理
最近写一个上位机遇到套接字读取数据的时候线程停止。
上读取代码:
public static bool ReadAirCompressor(string address, out int Data){bool result=false;address = DataRead.ReadAddress; //空压机地址int cnt = 43; //读取数据个数result = ComCompressor(address, 0x01,0x10, cnt);if (result == true){Data = 1;return true;}else{Data = 0;return false;}}public static bool ComCompressor(string ipaddress, int address, int state, int DataCnt ){byte[] Mdata = new byte[8];dataCnt = DataCnt;//先声明读数据长度DateTime sendtime = DateTime.Now;// SendData =Convert.ToString( sendtime)+">>"+ipaddress+address+dataCnt; //发送到显示Mdata[0] = Convert.ToByte(address); //modbus站号Mdata[1] = 0x03; //功能码 写多个寄存器Mdata[2] = 0x00;Mdata[3] = 0x30;//Mdata[2] = Convert.ToByte(state >> 8); //起始地址高位//Mdata[3] = Convert.ToByte(state & 0xFF);//起始地址地位Mdata[4] = 0x00; //寄存器总数高位Mdata[5] = 0x02; //寄存器总数低位 2Mdata[6] = 0xC4; //CRC校验高Mdata[7] = 0x04; //CRC校验低//连接套接字Socket sokClient = null;//负责与服务端通信的套接字sokClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //创建 ip对象IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse("192.168.0.110"),8001);//连接 服务端监听套接字sokClient.Connect(endpoint);sokClient.Send(Mdata);byte[] msgArr = new byte[9 * 1];//接收到的消息的缓冲区int length = 0;//接收服务端发送来的消息数据 threadThread.Sleep(100);SendData = "";if(sokClient.Available>0){length = sokClient.Receive(msgArr);//Receive这里阻断线程}else{sokClient.Close();}int[] d = new int[msgArr.Length];string[] hex=new string[msgArr.Length];for (int i=0;i<msgArr.Length;i++){d[i] = Convert.ToInt32(msgArr[i]);hex[i] = d[i].ToString("X2");}return false;}
如上代码,无缘无故线程停止。
查问题,逐句运行。发现是读取数据的时候出错。
所以增加一个判断,在有消息的时候进行读取。
但是发现一直收不到消息。
检测发现报文发送错误。
修改正确的报文后bug解决。
c#Socket遇到Receive阻断线程问题处理相关推荐
- C# 中socket根据Receive判断 TcpClient关闭连接的处理
C# 中socket根据Receive判断 TcpClient关闭连接的处理 程序脚手架 在C#中,开发网络应用,.Net Framework提供了各种便利. - TcpListener用于服务端的监 ...
- C# Socket客户端采用双线程断网重连断线重连)
C# Socket客户端采用双线程断网重连断线重连 2021年07月15日 13:38:18更新 C# Socket服务端 双线程断网重连断线重连 C# Socket客户端采用双线程断网重连断线重连 ...
- python实现socket编程(使用线程池)
使用线程池实现多个客户端和服务端聊天. 首先运行服务端,待服务端运行起来之后,最后运行客户端. 客户端: import os import threadingimport cv2 import soc ...
- socket编程和进程线程同步跟新
博主认为如果这两个分开更新的话,博主不知道要更新多久,所以不如大胆一点,进程线程与socket网络编程一起更新,希望能快一点结束这里的故事从而开启更多新篇章.
- Linux下基于C++11的socket网络编程(线程版本)
第一:关于C++11的线程操作 哈哈,百度这个比较直接,可以很清楚的告诉你. 第二:声明 不再追溯,可以先看看(基础版本)(进程版本)(select函数版本)(epoll版本)再看这个,谢谢. 工具类 ...
- python 弹窗不阻断线程_Javascript 如何阻断程序的运行
通常情况下 JavaScript 是单线程的,一段 Js 程序的运行会占满整个程序进程,我们通常会想方设法的通过异步编程来减少程序的阻塞,那么我们今天反其道而行之,看看通过怎么样正常的方式来阻塞 Js ...
- python 弹窗不阻断线程_js或者jquery如何实现类似alert式的函数阻断?
据我所知,目前还只有 alert 可以阻断.这种情况下,我觉得你应该考虑的是异步(Callback或Promise)方式,而不是阻断方式,比如 你想要的(仅算法) doSomethingBefore( ...
- 解决Python Socket UDP端口侦听线程内更新UI界面卡顿、奔溃的问题
网络读卡器介绍:WIFI无线网络RFID云读卡器远程网络开关物流网NB-IoT4G刷卡阅读器-淘宝网 (taobao.com) Python使用PyQt5做UI界面,开启线程侦听UDP端口,端口接收到 ...
- 消息队列NetMQ 原理分析2-IO线程和完成端口
目录 前言 介绍 目的 IO线程 初始化IO线程 Proactor 启动Procator线程轮询 处理socket IOObject 总结 前言 介绍 [NetMQ](https://github.c ...
最新文章
- Spring Cloud应用开发(三:客户端的负载均衡)
- hdaoop下HDFS操作
- python退出命令-python退出指令
- 敏感词库 php,敏感词过滤的php类库
- Spring @ControllerAdvice @ExceptionHandler
- 我在美团Android研发岗工作的那5年,含泪整理面经
- 高等组合学笔记(十一):分拆与Gauss二项式系数,恒等式与展开式
- 解决JupyterLab/JupyterNotebook安装pycherts后依旧报错报错 ModuleNotFoundError: No module named ‘pyecharts‘
- centOS7忘记密码重置方法
- python图书馆预约系统_python实现图书馆研习室自动预约功能
- 教你使用faceBook的chisel来提高调试效率
- 编译器——指令的汇编
- 基于HTML5+CSS制作 H5移动端电商购物网页设计35页面(包括主页,商品详情,转账,付款,购物车等页面) 功能齐全...
- 在MAME里如何设置组合键
- 计算机网络的三大功能,计算机网络主要功能
- Oliver的救援【BFS】
- mysql表达式转字符串_[转载]MYSQL 字符串操作[]
- 一年级上册计算机教学计划,一年级信息技术上册教学计划一年级信息技术教学计划...
- 思科9124光纤交换机配置管理使用手册
- JDBC,你真的知道怎么用吗?