将一个 C# 客户端集成到一个 node.js + socket.io 聊天应用中。

3
作为学习node.js的一部分,我刚刚使用node.js和socket.io创建了一个非常基本的聊天服务器。该服务器基本上将访问chat.html网页的每个人添加到实时聊天中,一切似乎都正常!现在,我想让一个C#桌面应用程序参与聊天(不使用Web浏览器控件:))。最佳方法是什么?

C# WebSocket客户端。更理想的解决方案是通过Socket.io公开TCP套接字,但这听起来非常麻烦。 - Raynos
2个回答

4

我在Node.js中创建了一个socket服务器,并使用TcpClient连接到它。

using (var client = new TcpClient())
{
    client.Connect(serverIp, port));
    using (var w = new StreamWriter(client.GetStream()))
        w.Write("Here comes the message");
}

它可能需要更加完整,例如解释如何发送和接收socket.io消息,但这是最好的答案。 - Benja

1
尝试使用HttpWebRequest类。它非常容易使用,不依赖于类似System.Web或任何特定的Web浏览器的东西。我在测试应用程序中使用它模拟浏览器请求并分析响应。它足够灵活,可以让您设置自己的每个请求标头(以防您正在使用restful服务或其他需要特定标头的服务)。此外,默认情况下它会为您跟随重定向,但这种行为很容易关闭。
创建一个新请求很简单:
HttpWebRequest my_request = (HttpWebRequest)WebRequest.Create("http://some.url/and/resource");

提交请求:

HttpWebResponse my_response = my_request.GetResponse();

现在,您可以确保获得正确的状态代码,查看响应头,并通过流对象访问响应正文。为了执行诸如添加帖子数据(例如HTML表单数据)到请求之类的操作,只需将UTF8编码的字符串写入请求对象的流中。

这个库应该很容易包含在任何WinForms或WPF应用程序中。MSDN上的文档非常好。

但是有一个问题,如果响应不在200-402范围内,HttpWebRequest会抛出一个异常,您必须捕获它。幸运的是,您仍然可以访问响应对象,但是处理它作为异常有点烦人(特别是因为异常在服务器端而不是在客户端代码中)。


Http 不像 socket.io 一样设计用于双向通信,如果想要使用它,应该采用长轮询实现。如果您使用的是 .Net 平台,最好直接使用 Tcp Sockets。 - Benja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接