我已经成功开始使用C ++中的套接字,并在python客户端中连接到它。我首先发送纯字符串,并在遇到分隔符时停止C ++ Boost(在我的情况下,我使用
// C++ boost Socket Server
std::string read_socket_command(tcp::socket & socket) {
boost::asio::streambuf buf;
boost::asio::read_until( socket, buf, "\n" );
std::string data = boost::asio::buffer_cast<std::string*>(buf.data());
return data;
}
http://think-async.com/Asio/boost_asio_1_12_1/doc/html/boost_asio/overview/core/line_based.html
我的问题是,现在在Python客户端中,我想打包发送数据作为结构。但是如何告诉C ++代码停止读取数据?
# Python Client
import struct
DATA_NAME_String = "string int int int long long int int int"
DATA_FORMAT_STRING = "25s I I I I I I I I"
def pack_data(msg):
debug_print("Packing a message...")
if type(msg) is SomeCustomType:
data = ("hi", 22, 1, 4, 457, 42342, 0, 1)
packer = struct.Struct(DATA_FORMAT_STRING)
packed_data = packer.pack(*data)
return packed_data
答案 0 :(得分:3)
在打包数据中,让前4个字节(uint32_t)指示有效负载的字节数。简而言之,在发送二进制数据时,您应该提前发送另一方的大小。 d = {'col1': ['a>b>c']}
df = pd.DataFrame(data=d)
df = pd.concat([df, df.col1.str.split('>', expand=True)], axis=1)
df.columns = ['col1', 'col11', 'col12', 'col13']
df
对文本协议有效,但对于二进制数据,您可能必须使用 col1 col11 col12 col13
0 a>b>c a b c
。