我正在尝试在服务器(C#)应用程序和客户端之间发送二进制数据(js-application - 由WebSocket制作)。建立服务器和客户端之间的连接,握手正常。来自客户端的消息是由服务器接收的,但是当我尝试将二进制数据发送到客户端时,事件“onmessage”不起作用。 这是我的C#代码的片段。在“sendFile”函数中发送二进制数据。
class Listener
{
private IPAddress ip;
private int port;
private TcpListener server;
private TcpClient client;
private NetworkStream stream;
private bool isSuccHandshaked;
public Listener()
{
ip = IPAddress.Loopback;
port = 8080;
server = new TcpListener(ip, port);
isSuccHandshaked = false;
}
private void makeHandshake()
{
//...
}
private String decodeMessage(Byte[] bytes)
{
//...
}
private void sendFile()
{
Byte[] dataToSend = File.ReadAllBytes("test.txt");
stream.Write(datatosend, 0, datatosend.Length);
stream.Flush();
}
public void startListen()
{
server.Start();
Console.WriteLine("Server has started on {0}. Port: {1}. {2}Waiting for a connection...", ip, port, Environment.NewLine);
client = server.AcceptTcpClient();
Console.WriteLine("A client connected.");
stream = client.GetStream();
while (!isSuccHandshaked)
{
makeHandshake();
}
while (true)
{
if (client.Available > 0)
{
Byte[] bytes = new Byte[client.Available];
stream.Read(bytes, 0, bytes.Length);
String message = decodeMessage(bytes);
sendFile();
}
}
}
}
}
和js-code:
var address = 'ws://localhost:8080';
var socket = new WebSocket(address);
socket.binaryType = "arraybuffer";
socket.onopen = function() {
alert('handshake successfully established. May send data now...');
socket.send("Aff");
};
socket.onclose = function() {
alert('connection closed');
};
socket.onmessage = function(evt) {
console.log("Receive message!");
console.log("Got ws message: " + evt.data);
}
使用WebSocket协议接收数据时可能存在一些特殊属性?您可以推荐哪些有用的方法将二进制数据从C#代码发送到js?
答案 0 :(得分:1)
websocket不是原始TCP套接字。它使用HTTP协商和您必须遵守的自己的成帧协议。如果您有兴趣在C#中编写自己的服务器,请查看this。
但是,如果您只想使用它们,则可以使用IIS的默认Microsoft实现,也可以使用众多独立的websockets组件之一。我维护了一个名为WebSocketListener。