连接通道

### 用于连接各检测通道的接口基于WebSocket协议,通道身份以通道ID(暂支持1-8)识别。使用时按以下方式构造WebSocket URL: ## ws://{serverIp}:2442/channel/{id} #### 示例:如需要连接ID为1的通道,假设服务器部署在本地,则URL为: #### ws://127.0.0.1:2442/channel/1 #### 使用以上URL即可连接WebSocket服务端的画面广播服务。 连接上通道后按以下方式解析图像数据: ||长度|格式|类型|数据| |-|-|-|-|-| |字节长度|4byte|1byte|1byte|图像数据| |说明|数据长度转为32位无符号整数(大端模式)|0表示JPG格式图片|0表示合格通过,否则为异常或缺陷|实际的图像byte数据| 以下是封装图像数据的Python代码示例: ```Python def newImgMsg(img,format,type): lenBytes=len(img).to_bytes(4,byteorder='big') fmtByte=format.to_bytes(1,byteorder='big') typeByte=type.to_bytes(1,byteorder='big') return lenBytes+fmtByte+typeByte+img ``` 以下是解析图像数据的C#代码示例: ```C# private async void ReceiveAsync() { var id = ChannelId; var frameArrived = FrameArrived; DataReader reader = null; if(ServiceSocket != null) { reader = new DataReader(ServiceSocket.InputStream); Reader = reader; } while (reader != null && IsConnected) { try { // Read Head var head = new byte[6]; if(reader == null) break; await reader.LoadAsync(6); reader.ReadBytes(head); uint length = BitConverter.ToUInt32(new byte[] { head[3], head[2], head[1], head[0] }, 0); // Read data await reader.LoadAsync(length); if(reader == null) break; byte[] buffer =new byte[length]; reader.ReadBytes(buffer); // Create a new instance of DdsImage DdsImage image = new DdsImage($"{id}", buffer, DateTime.Now, head[4], head[5]); frameArrived?.Invoke(this, image); }catch(Exception exp) { Logger.Log(exp); } } } ``` ## ### 测试 用于检测画面广播的WebSocket服务还提供了一个用于测试的接口,可用来验证服务是否正在运行。 可以用以下URL连接服务: **ws://localhost:2442/echo** 连接成功后,向服务发发送任意内容时,服务端将原封不动向客户端返回该内容。