从c#连接到node.js服务器

本文关键字:js 服务器 node 连接 | 更新日期: 2023-09-27 17:50:53

我正在尝试编写一个。net客户端可以连接到交换消息的简单服务器。来自任何客户端的任何消息都将发送到所有其他客户端。Node.js + socket。去这里似乎是个好办法,但是我遇到麻烦了。我正在使用来自套接字的示例代码。当我从浏览器连接到它时,控制台会跟踪所有的连接和心跳事件,所以我认为我至少正确地设置了环境。

我的客户端代码(粘贴在下面)与Socket类的示例代码非常相似,但是它的行为很奇怪。在"ProcessConnect"处理程序中,e.s lastoperation =="Connect",e.s socketerror =="Success",但是服务器端的连接事件处理程序没有触发。同样奇怪的是,当代码发送"Hello World"时,接收处理程序也会因"Hello World"返回而被触发。我知道这不是来自服务器,因为服务器上没有代码来做这个。我想可能是套接字连接到自己或其他东西,但如果我关闭服务器,连接失败。

显然有一些基本的东西我错过了。net套接字,但我不确定它是什么。

客户:

public class NodeClient
{
    Socket _Socket;
    public NodeClient()
    {
        SocketAsyncEventArgs socketState = new SocketAsyncEventArgs();
        socketState.Completed += SocketState_Completed;
        socketState.RemoteEndPoint = new DnsEndPoint("localhost", 81);
        _Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        _Socket.ConnectAsync(socketState);
    }
    private void SocketState_Completed(object sender, SocketAsyncEventArgs e)
    {
        if (e.SocketError != SocketError.Success)
        {
            throw new SocketException((int)e.SocketError);
        }
        switch (e.LastOperation)
        {
            case SocketAsyncOperation.Connect:
                ProcessConnect(e);
                break;
            case SocketAsyncOperation.Receive:
                ProcessReceive(e);
                break;
            case SocketAsyncOperation.Send:
                ProcessSend(e);
                break;
            default:
                throw new Exception("Invalid operation completed.");
        }
    }
    // Called when a ConnectAsync operation completes
    private void ProcessConnect(SocketAsyncEventArgs e)
    {
        byte[] buffer = Encoding.UTF8.GetBytes("Hello World");
        e.SetBuffer(buffer, 0, buffer.Length);
        bool willRaiseEvent = _Socket.SendAsync(e);
        if (!willRaiseEvent)
        {
            ProcessSend(e);
        }
    }
    // Called when a ReceiveAsync operation completes
    private void ProcessReceive(SocketAsyncEventArgs e)
    {
        string message = Encoding.UTF8.GetString(e.Buffer, 0, e.Buffer.Length);
    }

    // Called when a SendAsync operation completes
    private void ProcessSend(SocketAsyncEventArgs e)
    {
        bool willRaiseEvent = _Socket.ReceiveAsync(e);
        if (!willRaiseEvent)
        {
            ProcessReceive(e);
        }
    }
}
服务器:

var io = require('socket.io').listen(81);
io.sockets.on('connection', function (socket) {
    console.log('connected yo');
});

从c#连接到node.js服务器

您可以尝试使用自己的套接字代码处理此问题。我建议您使用像SocketIO4Net这样的库处理与。net的集成

SocketIO4Net - http://socketio4net.codeplex.com