2

データを送信する Python のクライアントがあります (データ長メッセージが前に付いています)。

s = socket.socket()
s.connect((host, port))
data = 'hello world'
s.sendall('%16s' % len(data)) #send data length
s.sendall(data) #send data
s.close()

そして、データを受け取る Java のサーバー。サーバーは、データを読み取る前にDataInputStream.readInt()を使用してデータ長を読み取ります。しかし、私は readInt() によって返される非常に大きな数値を取得しているようです。何が問題ですか?

4

2 に答える 2

2

@mensi が言うように、他の処理がない場合、Java はデータのバイナリ表現を受け取ることを期待していますが、これは Python が送信するものとは異なります。この種の問題に対する一般的な解決策は、データをシリアル化することです。つまり、データをネットワーク送信により適した形式に変換し、受信側でデータを再構成します。

Python と Java の両方がサポートしている一般的なシリアル化形式はJSONです。最近のバージョンの Python にはjson、標準ライブラリの一部としてモジュールが含まれています。

于 2012-04-19T13:25:04.357 に答える