【发布时间】:2018-09-10 03:59:40
【问题描述】:
我有使用 websocket 的 C++ 程序代码。我使用的服务器端: recv(sSocket, szBufferTmp, 99990, 0) 从客户端接收数据 当客户端发送的数据超过服务器可以读取的速度时,我的服务器在函数 recv() 中被阻塞并且数据仍在输入队列中。我使用 recv(sSocket, szBufferTmp, 99990, MSG_PEEK) 测试并看到我的数据仍在输入队列中。为什么 recv(sSocket, szBufferTmp, 99990, 0) 无法读取数据但 recv(sSocket, szBufferTmp, 99990, MSG_PEEK) 是可能的?我该如何解决? 当客户端发送消息 1、2、3 时,我的错误相同。服务器收到 1,2。客户端发送 4-> 服务器接收 3。 5-> 4,... 尽管数据仍在输入队列中,但它延迟了。我可以通过使用“MSG_PEEK”来获得它 这是我的代码:
Client is JavaScript:
> var m_cWebsocket = new WebSocket("Servername");
> if (m_cWebsocket == null) { return false; }
> m_cWebsocket.onopen = onWebsocketOpen(m_cWebsocket);
> m_cWebsocket.onmessage = onWebsocketMessage;
> m_cWebsocket.onerror = onWebsocketError;
> m_cWebsocket.onclose = onWebsocketError;
> I using m_cWebsocket.send(strMsg) to send data.
服务器:
当(真) { recv(sSocket, szBufferTmp, 99990, 0);
//recv(sSocket, szBufferTmp, 99990, MSG_PEEK); //一些过程 }
【问题讨论】:
-
请在两边显示您的实际代码
-
客户端是 JavaScript: var m_cWebsocket = new WebSocket("Servername"); if (m_cWebsocket == null) { return false; } m_cWebsocket.onopen = onWebsocketOpen(m_cWebsocket); m_cWebsocket.onmessage = onWebsocketMessage; m_cWebsocket.onerror = onWebsocketError; m_cWebsocket.onclose = onWebsocketError;我使用 m_cWebsocket.send(strMsg) 发送数据。服务器:while (true) { recv(sSocket, szBufferTmp, 99990, 0); //recv(sSocket, szBufferTmp, 99990, MSG_PEEK); //某个进程 }
-
请edit您的问题包括您的代码。请勿在 cmets 中发布
-
如果你被
recv屏蔽了,那么就没有数据可以读取了。 -
数据仍在输入队列中,为什么它在recv中被阻止?我该如何解决?