【发布时间】:2020-09-14 18:51:08
【问题描述】:
我尝试将这段代码从 Python 转换为 C++:
import socket
host, port, length = '127.0.0.1', 3000, 8
sock = socket.create_connection((host, port))
sock.send(b'\x02\x01\x00\x00\x00\x00\x006build\nedition\nnode\nservice\nservices\nstatistics\nversion')
buf = bytearray(length)
buf = bytearray(length)
view = memoryview(buf)
while length > 0:
nbytes = sock.recv_into(view, length)
view = view[nbytes:]
length -= nbytes
print(buf)
使用boost::asio::ip::tcp::socket。下面是负责发送请求和接收响应的代码部分:
boost::asio::io_service service;
boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string("127.0.0.1"), 3000);
boost::asio::ip::tcp::socket sock(service);
sock.open(boost::asio::ip::tcp::v4());
sock.connect(ep);
sock.write_some(boost::asio::buffer("\x02\x01\x00\x00\x00\x00\x006build\nedition\nnode\nservice\nservices\nstatistics\nversion"));
char buff[1024];
sock.read_some(boost::asio::buffer(buff,1024));
sock.shutdown(boost::asio::ip::tcp::socket::shutdown_receive);
sock.close();
std::cout << buff;
但是,此代码在收到响应时冻结(在执行 sock.read_some() 时)。这里可以更改/纠正什么?
【问题讨论】:
-
您的意思是
sock.read_some()冻结?服务器在发送数据吗?你验证了吗? -
@Torxed,是的,Python 代码有效。
-
我对 Python 代码并不感兴趣,您是否调试过(tcpdump、wireshark 等)以确保数据实际命中您的 C++ 代码? :)