连接通道
### 用于连接各检测通道的接口基于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**
连接成功后,向服务发发送任意内容时,服务端将原封不动向客户端返回该内容。