我正在为我的大学在C#和JS中实现一个websocket服务器,而我在设置它时遇到了麻烦。 我可以连接,握手和所有正确和测试。但在那之后,我无法读取来自浏览器的消息,直到我在stackoverflow上找到此函数(我丢失了链接,抱歉):
private static string byteToString(byte[] data){
byte firstByte = data[0];
byte secondByte = data[1];
int opcode = firstByte & 0x0F;
bool isMasked = ((firstByte & 128) == 128);
int payloadLength = secondByte & 0x7F;
if (!isMasked)
return null;
if (opcode != 1)
return null;
List<int> mask = new List<int>();
for (int i = 2; i < 6; i++)
{
mask.Add(data[i]);
}
int payloadOffset = 6;
int dataLength = payloadLength + payloadOffset;
List<int> unmaskedPayload = new List<int>();
for (int i = payloadOffset; i < dataLength; i++)
{
int j = i - payloadOffset;
unmaskedPayload.Add(data[i] ^ mask[j % 4]);
}
byte[] data2=unmaskedPayload.Select(e => (byte)e).ToArray();
System.Text.ASCIIEncoding decoder = new System.Text.ASCIIEncoding();
string result = decoder.GetString(data2, 0, data2.Length);
return result;
}
它应该从缓冲区获取data [],并且神奇地变成一个可读的字符串,它就像一个魅力,但如果我在浏览器中通过send()输入一个大字符串,那么该函数就不会干活了。 不幸的是,我不知道这个函数是如何找到问题的,你们有没有这种行为的线索? 我很乐意提供任何代码。
提前致谢。
答案 0 :(得分:1)
您可以使用C#第三方dll,如
通过使用此dll,我们可以同时连接100多个连接,并且我们可以像实时数据馈送一样单独与所有客户端通信。这也处理它内部的线程....