如何使用ASP.NET 4.0(C#)创建简单的HTML5 Websockets应用程序。 我的问题是创建Websockets。以下是试用的代码......
try
{
var listener = new TcpListener(IPAddress.Loopback, 9988);
listener.Start();
using (var client = listener.AcceptTcpClient())
using (var stream = client.GetStream())
using (var reader = new StreamReader(stream))
using (var writer = new StreamWriter(stream))
{
writer.WriteLine("HTTP/1.1 101 Web Socket Protocol Handshake");
writer.WriteLine("Upgrade: WebSocket");
writer.WriteLine("Connection: Upgrade");
writer.WriteLine("WebSocket-Origin: http://localhost:9988");
writer.WriteLine("WebSocket-Location: ws://localhost:8181/websession");
writer.WriteLine("");
}
listener.Stop();
}
catch (Exception ex)
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "", ex.Message);
}
HTML代码如下......!
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
<script type="text/javascript">
var status = '';
function conStatus(state) {
return (state == 0) ? 'Connecting..!' : (state == 1) ? 'Opened..!' : (state == 2) ? 'Closing..!' : 'Closed..!';
}
function WebSocketTest() {
if ("WebSocket" in window) {
try {
debugger;
var connection = new WebSocket('ws://localhost:9988');
status += '<br/>Socket Status: ' + conStatus(connection.readyState);
connection.onopen = function () {
status += 'Socket Opened..!';
};
connection.onmessage = function () {
status += 'Socket received a message..!';
};
connection.onclose = function () {
status += 'Socket Closed..!';
};
connection.send('Hello World..!');
}
catch (exception) {
status += '<br/>EXCEPTION: ' + exception;
}
}
else {
status += "Your Browser does not support WebSockets...!"
}
document.write(status);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="sse">
<a href="javascript:WebSocketTest()">Run WebSocket</a>
</div>
<div id="status">
</div>
</form>
</body>
</html>
如果我运行此文件,页面继续加载..我看不到任何结果..!请给我一个解决方案....提前致谢....
答案 0 :(得分:1)
您需要对服务器进行一些更改。最好先阅读规范的handshaking部分。至少,您需要在响应中添加Sec-WebSocket-Accept标头。您还可以考虑在客户端请求中检查Sec-WebSocket-Version和Sec-WebSocket-Protocol。
在此之后,您应该有一台服务器,它将完成其握手,然后立即关闭其连接。您应该使您的tcp客户端无限期保持活动状态,仅在客户端关闭或请求关闭或服务器要关闭时关闭它。
您还需要更新客户端代码。 new WebSocket(...)
提示的初始握手是异步的。在onopen
回调运行之前,您无法使用连接变量(因此请移动connection.send('Hello World..!')
行。)
之后,您应该阅读规范的data framing部分,了解如何发送/接收消息。
这增加了合理的工作量。您可能会发现使用现有的开源服务器更快。我自己没有使用它,但Fleck似乎很受欢迎,看起来应该很容易使用。
答案 1 :(得分:1)