c# websocket传图
时间: 2023-08-20 14:06:25 浏览: 53
在 C# 中使用 WebSocket 传输图像,可以通过将图像数据转换为字节数组,并使用 WebSocket 发送字节数组来实现。以下是一个简单的示例代码:
```csharp
using System;
using System.Drawing;
using System.IO;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
public class WebSocketClient
{
private ClientWebSocket webSocket;
public async Task Connect(string url)
{
webSocket = new ClientWebSocket();
await webSocket.ConnectAsync(new Uri(url), CancellationToken.None);
}
public async Task SendImage(string imagePath)
{
if (webSocket.State != WebSocketState.Open)
{
throw new Exception("WebSocket connection is not open.");
}
using (var image = new Bitmap(imagePath))
using (var stream = new MemoryStream())
{
image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
byte[] imageData = stream.ToArray();
await webSocket.SendAsync(
new ArraySegment<byte>(imageData),
WebSocketMessageType.Binary,
endOfMessage: true,
CancellationToken.None);
}
}
public async Task ReceiveImage(string savePath)
{
if (webSocket.State != WebSocketState.Open)
{
throw new Exception("WebSocket connection is not open.");
}
var buffer = new byte[1024];
var receivedData = new MemoryStream();
while (true)
{
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
receivedData.Write(buffer, 0, result.Count);
if (result.EndOfMessage)
{
using (var image = Image.FromStream(receivedData))
{
image.Save(savePath);
}
break;
}
}
}
public async Task Disconnect()
{
if (webSocket.State == WebSocketState.Open)
{
await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
}
webSocket.Dispose();
}
}
```
使用示例:
```csharp
static async Task Main()
{
var client = new WebSocketClient();
await client.Connect("wss://websocket-server-url");
// 发送图像
await client.SendImage("path_to_image.png");
// 接收图像
await client.ReceiveImage("received_image.png");
await client.Disconnect();
}
```
请注意,此示例仅用于演示目的,实际应用中可能需要进行错误处理和其他逻辑。