0

Pythonでソケットから別のソケットに送信したい整数があります。この整数 a=2 としましょう。この整数を接続を介してソケットに送信するにはどうすればよいですか。現在、私は次のコードを実行しました:

server_socket.send(str(a))         #Server side


b=int(client_socket.recv(512))        #Client side

しかし、 int() を呼び出すと、有効な長さではないというエラーが表示されます。私は基本的に recv() メソッドに入れる引数を取得していません。

4

2 に答える 2

1

回線を介して 4 バイトの整数を送信していますが、512 バイトを受信しようとしているため、次のように未割り当てのメモリを割り当てているだけです。

00000000000000000000000000[...さらに多くのバイトを切り取る...]

....受信したバイト数を使用すると、次のようになります。

F34D5DD2000000000000000000[...さらに多くのバイトを切り取る...]

したがって、int に変換できない 512 バイトのバイト配列があります。代わりに recv(4) を使用するか、動的な長さを処理するプロトコルを使用することをお勧めします (これは、この問題に対する唯一の実際に安定した解決策です。recv(4) で問題を解決することは期待できません)。

于 2012-10-04T12:34:24.337 に答える
0

TCP 接続を使用している場合、これはストリーミング プロトコルであり、固定サイズのメッセージがないことに注意してください。これは、 を呼び出すとrecv、要求されたバイト数よりも少ないバイト数を取得する可能性があることを意味しますsend。さらに への呼び出しがあった場合は、要求したすべてを受け取ることもできますsend

これはすべて、 への呼び出しrecvが、送信された文字列の一部のみ、またはそれ以上を返す可能性があることを意味します。いずれにせよ、受信した文字列は明らかに整数として有効ではありませんでした。実際に受け取ったものを確認するには、印刷する必要があります。

于 2012-10-04T12:33:25.207 に答える