我有两种情况:
- 客户端连接,不发送字节数和等待服务器响应。
- 客户端连接,发送超过1个字节,然后等待服务器的响应。
问题是,接下来的:在第一种情况下我应该读任何字节,并得到一些服务器响应。 在第二种情况,我应该至少读1字节,才把我会得到一个服务器响应。 如果我尝试读取至少为0字节,就像这样:
async_read(sock, boost::asio::buffer(data),
boost::asio::transfer_at_least(0),
boost::bind(&server::read, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
我将永远不会在第二种情况适当的服务器reposonse。
但是,如果我看过比这个async_read操作至少1个字节将永远不会结束。
那么,如何处理这个情况?
更新1:我还在寻找解决方案,而无需使用时间限制。
你怎么能指望这个工作? 是否响应所述第一和第二壳体之间改变? 如果它确实有所不同,你不能因为有一个竞争条件,你应该解决协议做到这一点可靠。 如果没有变化,服务器应该只发送响应。
这个问题的解决方案是不是一个ASIO问题。
这里是我做过什么
while (ec != boost::asio::error::eof) {
vector<char>socketBuffer(messageSize);
size_t buffersize = socket->read_some(
boost::asio::buffer(socketBuffer),ec);
if (buffersize > 0) {
cout << "received" << endl;
for (unsigned int i=0; i < buffersize; ++i) {
cout << socketBuffer.at(i);
}
cout << "" << endl;
}
socketBuffer.clear();
}
if(!ec){
cout<<"error "<<ec.message()<<endl;
}
socket->close();
这就是我的一小段代码我希望它可以帮助你可以读取数据的一组量,如果你喜欢它后来追加到字节的矢量并对其进行处理。
希望这可以帮助
我想ü需要使用这些数据,客户端发送,以防万一2适当的服务器响应,并可能使情况1.缺省的响应因此,有关于客户端应该多久发送连接后的数据没有时间限制服务器? 也许ü应该启动一个定时器等待限时特价服务器接受连接后。 如果服务器及时接收到数据时,它的情况下2.如果时间超过,那么它的情况下,1。