使用 Javascript 和 C# 连接到套接字时出现错误“WebSocket 打开握手超时”

JJtheJJpro

大约 4 小时的研究......我们开始了。

我有一个 C# 程序,可以发送和侦听特定 Socket 中的任何内容。使用套接字,C# 可以向它发送内容,也可以从它接收内容就好了。现在,转到我的 JavaScript 文件,我使用 WebSocket 接口与 C# 通信,但不起作用(通常在几分钟后超时)。当 Socket 在线时,JavaScript 代码将花费大约 4 分钟,然后抛出“WebSocket 打开握手超时”的错误。问题是我知道它可以找到,因为当 ip 的端口不存在时,JavaScript 文件会在接下来的几秒钟内引发错误。

我做过的事情:

关闭所有防火墙,在ip和端口开头同时使用ws和wss(例如:wss://xxx.xxx.x.xx:11111),更改端口,将ip更改为仍然可以访问的有效ip,研究4小时。

C#:

IPHostEntry ipHost = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipAddr = IPAddress.Parse("ip");
IPEndPoint localEndPoint = new IPEndPoint(ipAddr, 11111);

Socket listener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

try
{
    listener.Bind(localEndPoint);

    listener.Listen(10);

    while (true)
    {

        Console.WriteLine("Waiting connection...");

        Socket clientSocket = listener.Accept();

        byte[] bytes = new Byte[1024];
        string data = null;

        while (true)
        {

            int numByte = clientSocket.Receive(bytes);

            data += Encoding.ASCII.GetString(bytes, 0, numByte);

            if (data.IndexOf("<EOF>") > -1)
            {
                break;
            }
        }

        Console.WriteLine("Text received -> {0} ", data);
        byte[] message = Encoding.ASCII.GetBytes("Test Server");

        clientSocket.Send(message);

        clientSocket.Shutdown(SocketShutdown.Both);
        clientSocket.Close();
    }
}
catch (Exception e)
{
    Console.WriteLine(e.ToString());
}

JavaScript:

socket = new WebSocket("wss://ip:11111");
socket.onopen = function()
{
    alert("Connected!");
}
socket.onerror = function()
{
    alert("Connection Failed");
}

ip是本地的

长话短说,C# 可以与自身通信,而 JavaScript 可以找到它但无法与它通信。

用户2864740

正确完成握手。(或者使用一个库/连接类型。)

WebSocket协议(如原来所述RFC6455 - WebSocket协议)不打开一个简单的无限制插座,部分出于安全原因。

由于握手未完成,客户端 WS 请求将超时,因为从未收到 HTTP“升级”响应。在握手完成之前,WS 不会通过底层 TCP 连接处于活动状态。

启动 WebSocket 连接(“握手”)在 RFC 的第 4 节中定义它也在JavaScript 的工作原理:深入研究 WebSockets 和 HTTP/2 与 SSE + 如何选择正确的路径 中进行了讨论

客户端通过称为 WebSocket 握手的过程建立 WebSocket 连接。此过程从客户端向服务器发送常规 HTTP 请求开始。此请求中包含一个 Upgrade 标头,它通知服务器客户端希望建立 WebSocket 连接。

..

现在[after] 握手完成后,初始 HTTP 连接被使用相同底层 TCP/IP 连接的 WebSocket 连接替换此时,任何一方都可以开始发送数据。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Qt / OSX WebSocket打开握手超时

WebSocket打开握手在https中超时

Web套接字握手期间发生错误;使用autobahn.js,websocket连接失败

WebSocket打开握手超时php Ratxet websocket

使用Gatling进行负载测试时TLS握手超时

当我尝试在我的 chrome 浏览器 (MacOS) 中连接到 direcline.botframework.com 时出现“WebSocket 打开握手超时”

TCP-IP套接字C:尝试连接到服务器套接字时出现错误的地址错误

使用 C++ 和标准 C 库以异步方式实现处理套接字连接读取超时的最佳方法

在Linux机器中使用套接字发送和接收文件时出现C ++问题

错误:Node.js v6.9.1和MySQL中的握手不活动超时

AWS Lambda和Rds中的握手不活动超时错误

我可以从连接到使用 C++ 和 Windows 的服务器的套接字中获取哪些信息?

使用C#连接到Websocket(我可以使用JavaScript连接,但是C#给出状态码200错误)

当我尝试使用外部IP连接到服务器时Java套接字超时

连接超时已过期。尝试使用登录前握手确认时经过的超时时间

套接字超时!使用节点telnet-client进行Telnet连接时出现问题

使用ChromeDriver 2.43和Chrome通过Selenium连接到Chrome时超时,重试...错误

尝试重新打开连接时出现套接字关闭错误

如何使用C ++库Websocket ++建立安全的套接字连接?

如何在javascript(客户端)和java(服务器)中完成WebSocket握手?

如何使用套接字将Arduino连接到C ++?

Netty:如何在仍然支持本机套接字的同时添加 websocket 握手和框架

Nginx-使用自签名证书连接到上游时SSL握手错误

连接超时和套接字超时建议

Javascript套接字(失败:WebSocket握手期间出错:net :: ERR_CONNECTION_RESET)

如何使用套接字将Windows C#,Android和浏览器连接到一个数据库。(聊天应用程序)

尝试连接到我的服务器时使用Alamofire和Swift出现401错误

使用 Boost Asio c++ 打开和绑定 UDP 套接字的不同方法

Python,为什么在使用TCP套接字时出现10035(在服务器上)和10053(在客户端上)错误?