[英]Socket cannot receive data? Client is written using Boost.asyio library. Server is written in python
客户代码
#include <cstdlib>
#include <iostream>
#include <memory>
#include <utility>
#include <boost/asio.hpp>
#include <string>
#include <boost/array.hpp>
using namespace std;
using namespace boost::asio;
int main(int argc, char* argv[])
{
io_service service;
ip::tcp::endpoint ep(ip::address::from_string("127.0.0.1"), 2001);
ip::tcp::socket sock(service);
sock.connect(ep);
boost::asio::streambuf sb;
boost::system::error_code ec;
size_t len;
while (true)
{
//write data
sock.write_some(buffer("ok", 2));
//read data
read(sock, sb, transfer_all(),ec);
//handle error
if (ec && ec != error::eof) {
std::cout << "receive failed: " << ec.message() << std::endl;
}
else {
const char* data = buffer_cast<const char*>(sb.data());
std::cout << data << std::endl;
}
}
return 0;
}
服务器代码
import socket
import threading
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(("127.0.0.1",2001))
s.listen(5)
cons = []
print "begin....."
while True:
con,addr = s.accept()
#cons.append(con)
print con
while True:
data = con.recv(1024)
if not data:
con.close()
break;
print data
con.send("123")
s.close()
客户端可以向服务器发送“ ok”,但不能从服务器接收“ 123”。
如果我使用用python编写的客户端,则服务器和客户端可以很好地通信。
有人能说出这个错误的原因吗?
使用tcp::socket::read_some
方法。 该方法将阻塞,直到套接字接收到某些内容,然后读取数据为止(而read(...)函数将读取整个文件/套接字,直到EOF为止(仅当连接断开时才会发生))
例:
std::string recbuf;
while (true)
{
//write data
sock.write_some(buffer("ok", 2));
//read data
sock.read_some(buffer(recbuf, 1024), ec);
//handle error
if (ec && ec != error::eof) {
std::cout << "receive failed: " << ec.message() << std::endl;
}
else {
std::cout << recbuf << std::endl;
}
}
我发现了类似的问题boost :: asio :: ip :: tcp :: socket没有读取任何内容 。
使用read_until可以解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.