【问题标题】:Sending binary data by socket between C# and Js在 C# 和 Js 之间通过套接字发送二进制数据
【发布时间】:2017-04-29 17:10:33
【问题描述】:

我正在尝试在服务器 (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代码:

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 协议接收数据有一些特殊的属性?您可以推荐哪些有用的方法将binary 数据从C# 代码发送到js

【问题讨论】:

    标签: javascript c# sockets websocket


    【解决方案1】:

    websocket 不是原始 TCP 套接字。它使用 HTTP 协商和您必须遵守的自己的框架协议。如果您有兴趣用 C# 编写自己的服务器,请查看 this

    但是,如果您只想使用它们,您可以使用带有 IIS 的默认 Microsoft 实现,也可以使用许多独立的 websockets 组件之一。我维护一个名为WebSocketListener

    【讨论】:

    • 谢谢@vtortola,我制作了一个正确的帧,在发送时它开始正常工作。
    猜你喜欢
    • 2012-08-23
    • 2012-10-11
    • 2020-09-08
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多