0
いくつかのC++コードをPythonに変換しようとしていますが、これはJavaサーバーにデータを送信します。zlib.compressからPythonでソケットにデータを送信
原点C++コードは以下の通りです:
std::string msgstr = "";
msg.SerializeToString(&msgstr);
auto allocSize = msgstr.size() + 1024;
char* data = (char*)malloc(allocSize);
uLong gzlen = msgstr.size() + 1024;
Bytef*pCompressData = (Bytef*)malloc(gzlen);
auto result = CGameZipUtils::gzcompress(/**/);
if(result == 0) {
int tmp;
tmp = htonl((int)gzlen);
memcpy(&data[0], &tmp, 4);
memcpy(&data[4], pCompressData, gzlen);
sendData(data,(int)gzlen + 4);
}
は、今私はPythonでのzlibとソケットのパッケージを使用し、これまでのところ、私は圧縮部分が働いて持っているように見えるので、今のpythonでのデータ長の出力C++のように同じです。
msgstr = msg.SerializeToString()
print "msgstr: %s" % len(msgstr)
gzlen = len(msgstr) + 1024
compressor = zlib.compressobj(-1, zlib.DEFLATED, 31, 8, zlib.Z_DEFAULT_STRATEGY)
pCompressData = compressor.compress(msgstr)
pCompressData += compressor.flush()
gzlen = len(pCompressData)
print "gzlen: %s" % gzlen
tmp = socket.htonl(gzlen)
print "tmp: %s" % tmp
私は今が午前問題は、私がデータを送信し、私はzlib.compressから取得したデータを送信し、それにデータ長と頭を追加する方法がわからないということです私のサーバーに。
私が送信するためにデータを書き込む方法を考え出しする必要が:
send = "??????"
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((GATE_ADDRESS, GATE_PORT))
client_socket.send(data)
client_socket.close()
何かアドバイスが理解されるであろう、
最初に長さを送信し、次にデータを送信します。 –