Javaを使用して同じホストに複数の 連続接続を開いたり閉じたりするときに本当に奇妙な問題が発生しています。PythonとJavaでソケットを開くときの相違
私はfor
サイクルを実行して、tcpソケットを開き、データを送信し、 応答を受信して接続を終了しようとしています。このサイクルの3回目の反復後、 は機能しなくなります。ソケットのオープンと書き込みは動作しますが、読み取りはできません。
は、私が最初にこれが私のリモートホストとの問題だったと仮定が、私はこれをデバッグするために小型のpythonに スクリプトを書いて、それが正常に動作し、スクリプトを簡単に50回の以上の反復と常にリモートホストのための私のfor
サイクルを実行します と返信します。
とJavaとの比較では、Pythonがソケットを開いたり閉じたりする方法に違いはありますか?これをどのようにデバッグできますか?
ありがとうございました。
UPDATE:
は、ここで私は両方のケースで使用していたコードです:
のPython:
for i in range(0, 10):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(command)
data = s.recv(1024)
data = data[2:]
print 'Received', "--->%s<--" % data.decode()
のJava
for (int i = 0; i < 10; i++) {
Socket socket = new Socket("localhost", 9998);
OutputStream bos = socket.getOutputStream();
InputStream bis = socket.getInputStream();
byte[] raw = "XX0000NC".getBytes();
raw[0] = 0x0;
raw[1] = 0x6;
bos.write(raw);
bos.flush();
byte[] buffer = new byte[1024];
int readCount = bis.read(buffer);
System.out.println(new String(Arrays.copyOfRange(buffer, 2, readCount)));
socket.shutdownOutput();
socket.shutdownInput();
socket.close();
}
PythonとJavaの両方下にあるソケット関数にかなりまっすぐにマップします。 **あなたが問題を抱えているコード**を投稿してください。 – phihag
'close'の前に' shutdown'を実行してみてください。それはもっとTCPに優しいでしょう。 – rodrigo
@rodrigoありがとうございます。しかしそれは何も変わらなかった。 – simao