gpt4 book ai didi

python - Socket收不到数据?客户端是使用 Boost.asyio 库编写的。服务器是用python写的

转载 作者:行者123 更新时间:2023-11-28 05:07:43 25 4
gpt4 key购买 nike

客户端代码

#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,这仅在连接断开时发生)

You can read up the usage here.

示例:

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;
}
}

关于python - Socket收不到数据?客户端是使用 Boost.asyio 库编写的。服务器是用python写的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44277449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com