我有以下代码将图像从相机保存到磁盘:
public static Image getAndSaveImage(int imageCount)
{
var image = _camera.GetImage() as ThermalImage;
image.Palette = PaletteManager.Iron;
_camera.GetImage().EnterLock();
Image camImage = _camera.GetImage().Image;
_camera.GetImage().ExitLock();
camImage.Save("./images/picture" + Convert.ToString(imageCount) + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
return camImage;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我将图像保存到文件中.目前,在循环内调用此方法.我想用websocket替换保存到磁盘,因此客户端可以连接到此套接字并从底层流接收位图图像.由于位图是一个数组,这应该工作,不应该吗?
我在一些文件中读到我可以使用该TcpListener课程.所以我会做以下事情:
TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 80);
server.Start();
TcpClient client = server.AcceptTcpClient();
NetworkStream stream = client.GetStream();
Run Code Online (Sandbox Code Playgroud)
如何将我的位图图像写入此流,以便另一方的python客户端可以获取图像?我是否需要自己处理TCP握手?
非常感谢
编辑:最初,问题是关于WebSocket的具体问题; 以下所有内容都取决于 - 现已删除 - 位置.
WebSocket,RFC6455,不是一个裸插槽 - 它是一个非平凡的基于帧的协议,在转换到不同的协议之前,它与HTTP 1.1类似.所以; 如果你想使用WebSocket,你可能想要使用Web套接字服务器实现 - 手工操作并不好玩(相信我,我知道).
如果你想要简单,ASP.NET(包括ASP.NET Core和Kestrel)有一个内置的WebSocket API,可以轻易地转换.
然而!因为它是基于帧的协议,所以您不会使用常规协议Stream.WebSocket有两种主要的数据框架类型:文本和二进制(如果我们忽略只有文本的WebSocket的早期原型,并且基本上是一个不同的协议,用阴影命名) - 在你的情况下,你会想要二进制,显然,和你的最好的办法可能是将现有代码更改为保存到a MemoryStream,然后从中MemoryStream传递缓冲区以传递给WebSocket API.的最简单的方法有ToArray()上MemoryStream,但更有效的方法是使用GetBuffer()或TryGetBuffer(),并使用接受与偏移量(通常为0)和长度(这将是一个超大缓冲器的API (int)memoryStream.Length).
如果你实际上并不是指WebSocket,而只是指"通过互联网访问的TCP套接字",那么就忽略我所说的一切; TcpListener应该没事.
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |