WebSocketServer MSDN 示例
Posted
技术标签:
【中文标题】WebSocketServer MSDN 示例【英文标题】:WebSocketServer MSDN Example 【发布时间】:2013-11-18 10:02:49 【问题描述】:我写了一个简单的 WebSocketServer,我在 MSDN 网站上找到了它。但它不起作用。你能解释一下我应该如何运行这个简单的项目,因为我启动了它但什么也没发生。
服务器
namespace WebSocketServer
class Program
static void Main(string[] args)
var task1 = Run();
// Console.ReadLine();
public static async Task Run()
HttpListener s = new HttpListener();
s.Prefixes.Add("http://localhost:8000/ws");
s.Start();
var hc = await s.GetContextAsync();
if (!hc.Request.IsWebSocketRequest)
hc.Response.StatusCode = 400;
hc.Response.Close();
return;
var wsc = await hc.AcceptWebSocketAsync(null);
var ws = wsc.WebSocket;
for (int i = 0; i != 10; ++i)
// await Task.Delay(20);
var time = DateTime.Now.ToLongTimeString();
var buffer = Encoding.UTF8.GetBytes(time);
var segment = new ArraySegment<byte>(buffer);
await ws.SendAsync(segment, System.Net.WebSockets.WebSocketMessageType.Text, true, CancellationToken.None);
await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Done", CancellationToken.None);
客户
namespace WebSocketClient
class Program
static void Main(string[] args)
var clientTask1 = Client();
Console.ReadLine();
static async Task Client()
ClientWebSocket ws = new ClientWebSocket();
var uri = new Uri("ws://localhost:8000/ws/");
await ws.ConnectAsync(uri, CancellationToken.None);
var buffer = new byte[1024];
while (true)
var segment = new ArraySegment<byte>(buffer);
var result = await ws.ReceiveAsync(segment, CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Close)
await ws.CloseAsync(WebSocketCloseStatus.InvalidMessageType, "I don't do binary", CancellationToken.None);
return;
int count = result.Count;
while (!result.EndOfMessage)
if (count >= buffer.Length)
await ws.CloseAsync(WebSocketCloseStatus.InvalidPayloadData, "That's too long", CancellationToken.None);
return;
segment = new ArraySegment<byte>(buffer, count, buffer.Length - count);
result = await ws.ReceiveAsync(segment, CancellationToken.None);
count += result.Count;
var message = Encoding.UTF8.GetString(buffer, 0, count);
Console.WriteLine(">" + message);
我需要创建一个简单的网站,它将从 WebSocketServer 获取一些数据(例如时间)并将其显示在此页面上。我写了一些代码,但是什么都没有发生
<html>
<body>
<script type ="text/javascript">
var ws = new WebSocket("ws://localhost:8000/ws/");
ws.onmessage = function (args)
var time = args.data;
;
</script>
</body>
</html>
【问题讨论】:
您使用的是什么操作系统? (web-sockets 所需的 HTTP.SYS 是 win-8 以上和类似的服务器版本)并且:您是否以管理员身份运行? (注意:您不需要以管理员身份运行这样的服务器,但这是一种快速检查它不是端口访问 ACL 问题的方法,因为管理员帐户自动拥有访问权限) 我正在使用 7 (((我可以在 Windows 7 上使用 WebSockets 吗? 是的,你可以——它只是 TCP;但是,遗憾的是,没有使用 MS 实现:“但是,Windows 8 和 Windows Server 2012 支持客户端和服务器 WebSocket 的唯一公共实现。” 我确实有一个完整的 web-sockets 库,多年来我一直想开源;但是,还有一些其他开源客户端/服务器已经可用 【参考方案1】:在服务器端,Run
是一个async
方法; 一旦到达结果尚未完成的第一个await
,它将返回给调用者。这意味着您的服务器将退出Main
,并且在没有任何其他主(非工作)线程的情况下,您的服务器将终止。 Console.ReadLine
的存在是有原因的。放回去:
static void Main(string[] args)
var task1 = Run();
Console.WriteLine("Press return to exit the server");
Console.ReadLine();
【讨论】:
以上是关于WebSocketServer MSDN 示例的主要内容,如果未能解决你的问题,请参考以下文章
在 NodeJS 中将 WebSocket 连接到 WebSocketServer
React Native UnhandledPromiseRejectionWarning:TypeError:无法读取WebSocketServer上未定义的属性'url'