c#Socket服务器与客户端的开发(1)
程序员文章站
2022-07-02 17:14:35
串口扫描枪的简单实现 基于串口通讯的扫描枪的实现,主要借助SerialPort类,表示串行端口资源。实现很简单: 工具:usb转RS232转接头/个,扫描枪/套, 扫描枪串口接入转接头,转接头插电脑 接下来具体代码实现 1 using System; 2 using System.Collectio ......
串口扫描枪的简单实现
基于串口通讯的扫描枪的实现,主要借助serialport类,表示串行端口资源。实现很简单:
工具:usb转rs232转接头/个,扫描枪/套,
扫描枪串口接入转接头,转接头插电脑
接下来具体代码实现
1 using system; 2 using system.collections.generic; 3 using system.componentmodel; 4 using system.data; 5 using system.drawing; 6 using system.linq; 7 using system.text; 8 using system.threading.tasks; 9 using system.windows.forms; 10 using system.net; 11 using system.io.ports; 12 using system.threading; 13 14 namespace serialscannerdemo 15 { 16 public partial class serialscanner : form 17 { 18 public serialscanner() 19 { 20 initializecomponent(); 21 } 22 23 private void form1_load(object sender, eventargs e) 24 { 25 instanceserialport(); 26 } 27 28 /// <summary> 29 /// 实例化串行端口资源 30 /// </summary> 31 private void instanceserialport() 32 { 33 //实例化串行端口 34 serialport serialport = new serialport(); 35 //端口名 注:因为使用的是usb转rs232 所以去设备管理器中查看一下虚拟com口的名字 36 serialport.portname = "com5"; 37 //波特率 38 serialport.baudrate = 9600; 39 //奇偶校验 40 serialport.parity = parity.none; 41 //停止位 42 serialport.stopbits = stopbits.one; 43 //数据位 44 serialport.databits = 8; 45 //忽略null字节 46 serialport.discardnull = true; 47 //接收事件 48 serialport.datareceived += serialport_datareceived; 49 //开启串口 50 serialport.open(); 51 } 52 53 /// <summary> 54 /// 接收数据 55 /// </summary> 56 /// <param name="sender"></param> 57 /// <param name="e"></param> 58 void serialport_datareceived(object sender, serialdatareceivedeventargs e) 59 { 60 try 61 { 62 serialport serialport = (serialport)sender; 63 //开启接收数据线程 64 thread threadreceivesub = new thread(new parameterizedthreadstart(receivedata)); 65 threadreceivesub.start(serialport); 66 } 67 catch (exception ex) 68 { 69 setmessage(ex.message); 70 } 71 } 72 73 private void receivedata(object serialportobj) 74 { 75 try 76 { 77 serialport serialport = (serialport)serialportobj; 78 79 //防止数据接收不完整 线程sleep(100) 80 system.threading.thread.sleep(100); 81 82 string str = serialport.readexisting(); 83 84 if (str == string.empty) 85 { 86 return; 87 } 88 else 89 { 90 setmessage(str); 91 } 92 } 93 catch (exception ex) 94 { 95 setmessage(ex.message); 96 } 97 } 98 /// <summary> 99 /// 添加记录 100 /// </summary> 101 /// <param name="msg"></param> 102 private void setmessage(string msg) 103 { 104 richtextbox1.invoke(new action(() => { richtextbox1.appendtext(msg + "\r\n"); })); 105 } 106 } 107 }
注:因为使用的是usb转rs232 所以去设备管理器中查看一下虚拟com口的名字
接下来测试
找一张带有条码的包装袋或者印有条码的纸扫描
测试完成
这里说明一下
serialport中有6个读的方法
read();readline(); readbyte();readchar();这几个读方法是同步读
readexisting();readto();这两个方法是异步读
代码中在读之前使用了thread.sleep()方法使线程沉睡,目的就是要使异步读,读出的数据完整
顺便说一下,基于以太网的扫描枪的实现,其实将扫描枪当做是一个客户端,扫描完成一次相当于发送了一次基于tcp或者udp的请求,使用的socket服务器略加改变就能实现
c#socket服务器与客户端的开发(1)
源码:
链接:https://pan.baidu.com/s/1mdcj_i8w0rti-pis1ybdha
提取码:xs8d