目标:
在QTcpServer
和C#
客户端之间建立基于WebSocket协议的工作服务器-客户端连接。目前,通过localhost。
问题:
服务器可以与telnet
客户端配合使用,但不能与任何其他客户端配合使用(例如C#
客户端、WebSocket测试客户端chrome插件)。C#
客户端可以与C#
服务器或其他websocket服务器配合使用(例如wss://socketsbay.com/wss/v2/2/demo/)。在这种情况下工作意味着:建立连接,意味着服务器和客户端通过触发一些相应的OnOpen
事件来识别连接。
使用WireShark
监视网络活动,可以观察到以下内容:
当QTcpServer
与telnet
客户端成功连接时,红线以下的所有内容都会发生。看起来像是预期的http
握手。之后,可以交换数据。另一方面,当我尝试将QTcpServer
与telnet
以外的客户端连接时,红线以上的线条会出现。握手后,客户端似乎再次发送握手报头?(通过wireshark验证方向:客户端-〉服务器)。无论如何,在此之后,客户端的WebSocket状态停留在Connecting
上。服务器认为连接已经建立,但数据交换是不可能的。
这里的问题可能是什么?我不知道这是服务器端还是客户端的问题,因为如上所述,有些情况下双方都工作。
1条答案
按热度按时间omqzjyyz1#
结果发现问题是服务器需要一个常规的TCP连接,而客户端都在使用WebSocket协议。因此,尽管客户端和服务器似乎已经连接,但无法创建有效的连接。
下面的文章将更详细地介绍
Websockets
和常规TcpSockets
之间的区别:Diff websockets and sockets