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

我试图写一个简单的服务器,.NET客户端可以连接到交换消息。 来自任何客户的任何消息都将发送给所有其他消息。 node.js + socket.io似乎是一个很好的方式去这里,但我有麻烦。 我使用来自socket.io站点的示例代码,当我从浏览器连接到它时,控制台会根据需要跟踪所有连接和心跳事件,所以我认为我至less已经正确地设置了环境。

我的客户端代码(下面粘贴)与Socket类的示例代码非常相似,但它的行为很奇怪。 在“ProcessConnect”处理程序中,e.LastOperation ==“Connect”和e.SocketError ==“Success”,但服务器端的连接事件处理程序不会触发。 另外奇怪的是,当代码发送“Hello World”时,接收处理程序也会被“Hello World”发回。 我知道这不是来自服务器,因为服务器上没有代码来执行此操作。 我想也许套接字连接到自己或某事,但如果我closures服务器,连接失败。

显然有一些基本的东西我错过了.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'); }); 

你可以尝试使用你自己的套接字代码来处理。 我build议你使用像SocketIO4Net这样的库来处理与.Net的集成

SocketIO4Net – http://socketio4net.codeplex.com