使用C#创建一个简单的WebSocket服务器 [英] Create a Simple WebSocket server using C#
本文介绍了使用C#创建一个简单的WebSocket服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用C#创建一个Websocket服务器。这成功地将我的Websocket服务器与Web应用程序连接,但无法向Web客户端和Web服务器发送任何消息。
我在这里附上我的代码
TcpListener server = new TcpListener(IPAddress.Parse( 127.0.0.1), 8281 跨度>);
server.Start();
txtOutput.Text + = 服务器已在127.0.0.1:8281启动。{0}等待连接...... + Environment.NewLine;
TcpClient client = server.AcceptTcpClient();
txtOutput.Text + = 客户端连接。;
NetworkStream stream = client.GetStream();
// 进入无限循环,以便能够处理流中的每个变化
while ( true )
{
while (!stream.DataAvailable);
字节 [] bytes = new 字节跨度> [client.Available];
stream.Read(bytes, 0 ,bytes.Length);
// 将请求的字节翻译成字符串
String request = Encoding.UTF8.GetString(bytes);
if ( new 正则表达式( ^ GET)。IsMatch(request))
{
Byte [] response = Encoding.UTF8.GetBytes( HTTP / 1.1 101交换协议 + Environment.NewLine
+ 连接:升级 + Environment.NewLine
+ 升级:websocket + Environment.NewLine
+ Sec-WebSocket-Accept: + Convert.ToBase64String(
SHA1.Create()。ComputeHash(
) Encoding.UTF8.GetBytes(
new 正则表达式( Sec-WebSocket-键:(。*))。匹配(请求).Groups [ 1 ]。Value.Trim()+ 258EAFA5-E914-47DA-95CA-C5AB0DC85B11
)
)
)+环境。 NewLine
+ Environment.NewLine);
stream.Write(response, 0 ,response.Length);
}
其他
{
// < span class =code-comment>这部分中的一些错误
txtOutput.Text + = request;
字节 [] response = Encoding.UTF8.GetBytes( 收到的数据);
stream.Write(response, 0 ,response.Length);
}
}
我用这个样本开发了本文链接 https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_server #Decoding_messages [ ^ ]
解决方案
根据http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17
你必须添加标题字节。
// 一些bug在这部分
txtOutput.Text + = request;
字节 [] response = Encoding.UTF8.GetBytes( +收到的数据 );
response [0] = 0x81; //表示这是最后的消息,它在文本
response [1] = response.Length - 2; // payload size = message - header size
stream.Write(response,0,response 。长度); 跨度>
I am creating a Websocket server using C#. This successfully connected my Websocket server with the web application but not able to send any message to the web client and to the web server.
I am attaching my code here
TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 8281);
server.Start();
txtOutput.Text += "Server has started on 127.0.0.1:8281.{0}Waiting for a connection..." + Environment.NewLine;
TcpClient client = server.AcceptTcpClient();
txtOutput.Text += "A client connected.";
NetworkStream stream = client.GetStream();
//enter to an infinite cycle to be able to handle every change in stream
while (true)
{
while (!stream.DataAvailable) ;
Byte[] bytes = new Byte[client.Available];
stream.Read(bytes, 0, bytes.Length);
//translate bytes of request to string
String request = Encoding.UTF8.GetString(bytes);
if (new Regex("^GET").IsMatch(request))
{
Byte[] response = Encoding.UTF8.GetBytes("HTTP/1.1 101 Switching Protocols" + Environment.NewLine
+ "Connection: Upgrade" + Environment.NewLine
+ "Upgrade: websocket" + Environment.NewLine
+ "Sec-WebSocket-Accept: " + Convert.ToBase64String(
SHA1.Create().ComputeHash(
Encoding.UTF8.GetBytes(
new Regex("Sec-WebSocket-Key: (.*)").Match(request).Groups[1].Value.Trim() + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
)
)
) + Environment.NewLine
+ Environment.NewLine);
stream.Write(response, 0, response.Length);
}
else
{
//some bug in this part
txtOutput.Text += request;
Byte[] response = Encoding.UTF8.GetBytes("Data received");
stream.Write(response, 0, response.Length);
}
}
I developed this Sample using this article link https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_server#Decoding_messages[^]
解决方案
According to http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17
you must add header bytes.
//some bug in this part txtOutput.Text += request; Byte[] response = Encoding.UTF8.GetBytes(" " + Data received"); response[0] = 0x81; // denotes this is the final message and it is in text response[1] = response.Length - 2; // payload size = message - header size stream.Write(response, 0, response.Length);
这篇关于使用C#创建一个简单的WebSocket服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文