當使用Java打開和關閉多個連接到同一主機的多個 時,我遇到了一個非常奇怪的問題。使用Python和Java打開套接字時的差異
我想運行一個for
週期來打開一個TCP套接字,發送一些數據,接收一個 響應並關閉連接。在該循環的第三次迭代之後,其 停止工作。打開並寫入套接字仍然有效,但不能讀取。
我首先假定這是我的遠程主機有問題,但我寫的小蟒蛇 腳本調試這一點,它工作正常,腳本容易執行我for
週期超過50次迭代,並始終遠程主機回覆爲 預計。
與Python的方式相比,當python打開和關閉套接字的方式有什麼不同嗎 ?我怎樣才能調試呢?
謝謝。
UPDATE:
這裏是我使用在這兩種情況下的代碼:使用
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 2011-12-28 11:36:30
嘗試在「關閉」之前執行「關閉」操作。這將更加TCP友好。 – rodrigo 2011-12-28 12:15:26
@ rodrigo謝謝。儘管如此,這並沒有改變。 – simao 2011-12-28 12:29:29