客户端服务器python - c++
client server python -C++
我使用boost asio和协议缓冲区编写了简单的客户端(c++)服务器(Python)通信。我来回传递数组。我的问题是,当我将数组从服务器(python)传递到客户端(c++)时,我的第一个数组在c++输出中只有大约50个元素。如何解决这个问题,我必须传递10个包含10000个元素的数组。
客户端c++读取客户端数据的代码片段:
boost::asio::transfer_exactly(65536) */);
boost::asio::streambuf b;
boost::asio::streambuf::mutable_buffers_type bufs = b.prepare(10000000);
size_t n = socket.receive(bufs);
b.commit(n);
std::istream is(&b);
std::string s;
is >> s;
object1.ParseFromString(s);
std::cout << object1.DebugString();
// this line doesn't output allarray's elemenents.
}
catch (std::exception& e)
{
//std::cerr << e.what(luuu) << std::endl;
}
std::cout << "nClosing";
std::string dummy;
}
Python服务器: import socket
from test_pb2 import Person
import dataf_pb2
host = 'localhost'
port = 10000
backlog = 55
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
element = dataf_pb2.ParticleMatrix()
for i in range(1000):
element.xPox.append(i * 0.53434)
for i in range(1000):
element.yPox.append( i * 0.53434)
for i in range(1000):
element.zPox.append(i * 0.53434)
message= element.SerializeToString()
element1 = dataf_pb2.ParticleMatrix()
while 1:
client, address = s.accept()
print ('Client connected')
data = client.recv(50000)
print data
if data:
object1 = dataf_pb2.ParticleMatrix()
object1.ParseFromString(data)
print object1.__str__()
print object1.ListFields()
client.send(message)
client.close()
您是否尝试使用sendall而不是直接发送?我一直在一个类似的客户端/服务器上工作(在纯c++中),我个人认为这是一个缓冲区问题。
我建议的另一件事是尝试捕获环回(如果客户端/服务器在同一台机器上运行),并查看数据包,看看实际发送了什么/多少数据。Wireshark是一个很有用的工具。
在send/recv中添加一些错误处理也会很有用,这样你就可以检查实际发送的总字节数,如果你不想做包捕获
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 如何将真正的字符串从python c-api转换为python脚本
- Python ctype 'c_char_p' Memory Leak