欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c#Socket服务器与客户端的开发(1)

程序员文章站 2022-07-02 17:14:35
串口扫描枪的简单实现 基于串口通讯的扫描枪的实现,主要借助SerialPort类,表示串行端口资源。实现很简单: 工具:usb转RS232转接头/个,扫描枪/套, 扫描枪串口接入转接头,转接头插电脑 接下来具体代码实现 1 using System; 2 using System.Collectio ......

串口扫描枪的简单实现

基于串口通讯的扫描枪的实现,主要借助serialport类,表示串行端口资源。实现很简单:

工具:usb转rs232转接头/个,扫描枪/套,

扫描枪串口接入转接头,转接头插电脑

c#Socket服务器与客户端的开发(1)

接下来具体代码实现

 

  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口的名字

接下来测试

找一张带有条码的包装袋或者印有条码的纸扫描

c#Socket服务器与客户端的开发(1)

测试完成

 

这里说明一下

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