C#使用WebSocket进行网络链接,和服务端搭建一个长连接进行通信。
有两种方式:串口方式(SerialPort)和网口方式(Socket 包括:TcpClient和UdpClient)
准备:
1.C#使用WebSocket的一种方法是使用SerialProt类(这个需要在Nuget包中添加System.IO.Ports,然后引入)
2.对于SerialPort的使用首先是声明实例化:
serialPort.Open(); //打开串口
serialPort.Close();//应该是关闭,目前没有试验过
注:对于串口(端口)一个端(服务端或者客户端)只能打开一次
解决:
设置serialPort
//一般需要的参数:串口名称,波特率,校验位,数据位,停止位
名称:看自己电脑,一般COM+数字
波特率可以查一下是否是必须要写的,
校验位:奇偶校验啥的
数据位:数据
停止位:到哪里停止,或者说是用来控制接受到的数据需要保留多少
//还有读/写缓存区大小,读写超时,判断链接状态等参数;
写操作:
serialPort.Write(); //进行WebSocket通信的写操作
两种方法:
读操作
三个参数:bety数组,偏移字节,接受长度count
serialPort。BytesToRead是读取字节数
serisalPort.Read();
进行类型转换成string
string msg = Econding.ASCLL.GetString(respBytes);
事件委托来进行读操作
在主函数中进行事件声明,然后定义函数逻辑
这部分会有这个问题:
这是因为在异步线程中处理了UI控件(这里进行的事件通知建立了长连接,就是在异步线程中进行的),UI控件必须在主线程处理
这部分可以使用MVVM模式进行数据绑定,这样在数据更新的时候不会触发异步线程导致的报错,使用MVVM模式的数据绑定不会出现上述问题:
上述问题的解决办法:
Socket对象(TcpClient和UdpClient)
准备
Socket引用using System.Net.Sockets
链接
发送
发送的代码
接受
主动接受
一个汉字四个字节,汉字使用UTF8编码。而且注意:
这部分还是会报错,因为UI线程需要在主线程中,不能使用在异步线程中,需要像下面一样:
第二种方法: