using System;
using System.Net;
using System.Net.Http.Headers;
using System.Net.WebSockets;
using System.Text;
using System.Threading.Tasks;
publicclassSimpleWebSocketServer
{
private HttpListener _listener;
publicasync Task StartAsync(string url)
{
_listener = new HttpListener();
_listener.Prefixes.Add(url);
_listener.Start();
Console.WriteLine($"Listening on {url}");
while (true)
{
var context = await _listener.GetContextAsync();
if (context.Request.IsWebSocketRequest)
{
ProcessWebSocketRequest(context);
}
else
{
// 处理非WebSocket请求
HandleHttpRequest(context);
}
}
}
privatevoidProcessWebSocketRequest(HttpListenerContext context)
{
var webSocketContext = context.AcceptWebSocketAsync(null).Result;
HandleWebSocketConnection(webSocketContext);
}
privateasync Task HandleWebSocketConnection(HttpListenerWebSocketContext webSocketContext)
{
var webSocket = webSocketContext.WebSocket;
var buffer = newbyte[1024];
WebSocketReceiveResult result;
do
{
result = await webSocket.ReceiveAsync(buffer, CancellationToken.None);
// Echo the message back to the clientawait webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);
} while (!result.CloseStatus.HasValue);
webSocket.Dispose();
}
privatevoidHandleHttpRequest(HttpListenerContext context)
{
// 处理普通的HTTP请求
context.Response.StatusCode = 200;
context.Response.Close();
}
}
客户连接调用
using System.Net.WebSockets;
using System.Threading;
using System;
using System.Text;
using System.Reflection;
var server = new SimpleWebSocketServer();
server.StartAsync("http://127.0.0.1:8080/");
usingvar cws = new ClientWebSocket();
// 设置每隔 5 秒发送一个 Ping 请求
cws.Options.KeepAliveInterval = TimeSpan.FromSeconds(5);
// 如果 1 秒内请求的服务端没有响应,则终止连接
cws.Options.KeepAliveTimeout = TimeSpan.FromSeconds(1);
Uri serverUri = new Uri("ws://127.0.0.1:8080");
var cancellationToken = new CancellationToken();
// 连接 WebSocket 服务器await cws.ConnectAsync(serverUri, cancellationToken);
await cws.SendAsync(Encoding.Default.GetBytes("Hello, World!"), WebSocketMessageType.Text, true, new CancellationToken());
var buffer = newbyte[1024];
var result = await cws.ReceiveAsync(buffer, new CancellationToken());
Console.WriteLine(Encoding.Default.GetString(new ArraySegment<byte>(buffer,0,result.Count)));
await cws.SendAsync(Encoding.Default.GetBytes(DateTime.Now.ToString()), WebSocketMessageType.Text, true, new CancellationToken());
result = await cws.ReceiveAsync(buffer, new CancellationToken());
Console.WriteLine(Encoding.Default.GetString(new ArraySegment<byte>(buffer, 0, result.Count)));
Console.ReadLine();
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧