创建 websocket 连接时出现 System.Net.Sockets.SocketException

Posted

技术标签:

【中文标题】创建 websocket 连接时出现 System.Net.Sockets.SocketException【英文标题】:System.Net.Sockets.SocketException when create a websocket connection 【发布时间】:2017-05-09 10:59:27 【问题描述】:

我是 websocket 的新手。我在 .net 4.5 框架中创建了一个控制台应用程序,并使用库“WebSocketSharp”创建了一个示例 websocket 客户端。我有以下代码

using System;
using WebSocketSharp;


namespace WebsocketTest

    class Program
    
        public static void Main(string[] args)
        
            try
             
            using (var ws = new WebSocketSharp.WebSocket("ws://192.168.18.186:7884"))
            
               Console.WriteLine("started");
                ws.Connect();
                ws.Send("START");
                Console.ReadLine();
                
            catch(Exception ex)
            
                Console.WriteLine(ex.Message);
                Console.ReadLine();
            

        
    

但我无法创建与在另一台机器上运行的 websocket 服务器的连接。我收到这样的错误消息

09-05-2017 16:20:41|Fatal|WebSocket.connect:0|System.Net.Sockets.SocketException (0x80004005): No connection could be made because the target machine actively refused it 192.168.18.186:7884
                             at System.Net.Sockets.TcpClient..ctor(String hostname, Int32 port)
                             at WebSocketSharp.WebSocket.setClientStream()
                             at WebSocketSharp.WebSocket.doHandshake()
                             at WebSocketSharp.WebSocket.connect()

与我的代码相关的问题是什么?有什么好的 websocket 库可用吗?

【问题讨论】:

【参考方案1】:

找出您的代码是否存在问题的最简单方法是使用任何启用了 web-socket 的浏览器尝试连接到端点,然后看看会发生什么。如果不确定,您也可以只使用telnet - 因为 web-sockets 以文本协议(http 1.1 标头)开始并且您没有使用 SSL,您应该能够打开连接并发送一些虚拟标头。如果telnet 无法连接:您的代码将无法连接。

如果telnet可以连接,那么可能是客户端库有问题。实际上,.NET 中内置了一个 web-socket 客户端,您应该可以使用它 (ClientWebSocket)

【讨论】:

以上是关于创建 websocket 连接时出现 System.Net.Sockets.SocketException的主要内容,如果未能解决你的问题,请参考以下文章

尝试从客户端连接时出现 WebSocket 问题

为 Kaleido 使用 Websocket 连接时出现“连接未在 send() 上打开”错误

使用 websocket 时出现“TypeError: a float is required”

关闭 websocket 时出现 SignalR 错误 - 句柄无效

AWS websocket服务器:从浏览器连接时出现403错误,从Python很好

在牛仔 websocket 处理程序中使用 gproc 注册两个本地进程时出现问题