关于我心爱的插座的另一个问题。我先解释一下我的情况。之后我会告诉你什么困扰着我。
我有一个客户端和一个服务器。这两个应用程序都是用带有 winsock2 实现的 C++ 编写的。连接通过 TCP 和 WLAN 运行。WLAN 非常重要,因为它可能会导致问题,并且肯定会成为通信渠道。
我正在将两个套接字连接到服务器。一个 SendSocket 和一个 ReceiveSocket。我不断通过 sendsocket 向服务器发送视频数据。数据被处理并被发送回客户端并被显示。每个套接字都有自己的线程。
Videodata 被编码,所以我达到了 500kB/s。让我们将此比率视为固定的,无需解释。
客户眼中的完美沟通:
Send Data
Recv Data
Send Data
Recv Data
...
这适用于 100 帧的情况。
但是每隔几帧,流就会冻结 4 帧,然后继续。(4帧相当于500ms)
这就是我面临的问题。
流发生的情况如下:
Send Data
Recv Data
Send Data
Send Data
Send Data1 -> blocked send
Recv Data
Recv Data
Send Data2 -> not blocked anymore.
数据在服务器端正确发送。
由于无线局域网不是双工的(据我所知),我认为发送呼叫由于某种原因被优先考虑。之后 Receive 调用被优先处理,因此 send 调用阻塞,直到 recv 调用完成。
也许你可以告诉我,下层发生了什么,这可能会导致问题。顺便提一句。我绝对不确定,如果它不仅仅是带宽问题,但我认为 WLAN 应该能够处理 500kB/s。这 500kB/s 是上游和下游一起。重要提示:如果我将帧速率设置为 1/5,则无法解决问题。
我知道很难用这种洞察力来解决这个问题。如果您能分享您的知识,我会很高兴,这样我就可以自己修复它。
编辑:它完全没问题,如果客户端 recv 挂了一点。但它不能阻止发送。服务器不断需要数据。