У меня действительно странная проблема при открытии и закрытии нескольких последовательных подключений к одному и тому же хосту с использованием Java.
Я пытаюсь запустить цикл for
, чтобы открыть сокет tcp, отправить некоторые данные, получите ответ и закройте соединение.После третьей итерации этого цикла он перестает работать.Открытие и запись в сокет все еще работает, но не чтение.
Сначала я предположил, что это проблема с моим удаленным хостом, но я написал небольшой скрипт на python для отладки, и он отлично работает, скрипт легковыполняет мой цикл for
для более чем 50 итераций, и удаленный хост всегда отвечает, как и ожидалось.
Есть ли что-то отличное в том, как python открывает и закрывает сокеты по сравнению с тем, как это делает Java?Как я могу отладить это?
Спасибо.
ОБНОВЛЕНИЕ:
вот код, который я использую в обоих случаях:
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();
}