2016-12-05 9 views
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() 

何かアドバイスが理解されるであろう、

+0

最初に長さを送信し、次にデータを送信します。 –

答えて

0

:)おかげでようやく私の自己解決を見つける:

data = struct.pack('i', tmp) 
//... 
client_socket.send(data + pCompressData) 
関連する問題