C#将映像写入TCP套接字

ItF*_*eak 1 c#

我有以下代码将图像从相机保存到磁盘:

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握手?

非常感谢

Mar*_*ell 5

编辑:最初,问题是关于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应该没事.