C#使用WebSocket进行链接

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线程需要在主线程中,不能使用在异步线程中,需要像下面一样:在这里插入图片描述

第二种方法:
在这里插入图片描述

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#提供了WebSocket类库,可以方便地实现WebSocket协议的通信。下面是一个简单的示例: ```csharp using System; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { using (var client = new ClientWebSocket()) { var uri = new Uri("ws://localhost:8080/ws"); await client.ConnectAsync(uri, CancellationToken.None); var sendBytes = new byte[] { 0x01, 0x02, 0x03 }; await client.SendAsync(new ArraySegment<byte>(sendBytes), WebSocketMessageType.Binary, true, CancellationToken.None); var receiveBuffer = new byte[1024]; while (client.State == WebSocketState.Open) { var receiveResult = await client.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), CancellationToken.None); if (receiveResult.MessageType == WebSocketMessageType.Close) { await client.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None); } else { var messageBytes = new byte[receiveResult.Count]; Array.Copy(receiveBuffer, messageBytes, receiveResult.Count); Console.WriteLine($"Received: {BitConverter.ToString(messageBytes)}"); } } } } } ``` 在这个示例中,我们首先创建了一个`ClientWebSocket`实例,并使用`ConnectAsync`方法连接WebSocket服务器。然后,我们使用`SendAsync`方法发送一个二进制消息。接下来,我们开启一个循环,不断接收来自WebSocket服务器的消息,并将它们打印到控制台上。最后,我们在循环中检查WebSocket的状态,如果状态为`WebSocketState.Open`,则继续接收消息;否则,我们调用`CloseAsync`方法关闭WebSocket连接。 需要注意的是,在实际使用中,我们需要处理`WebSocketException`和`OperationCanceledException`等异常。此外,我们还可以使用`WebSocketReceiveResult.EndOfMessage`属性来检查是否接收到了完整的消息,以及使用`WebSocketCloseStatus`枚举来指定WebSocket关闭的状态码和原因。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值