2013-09-20 3 views
0

У меня проблема с Java ServerSocket и Python, где у меня многопоточный эхо-сервер (написанный на Java), который может связываться с несколькими java-клиентами. Все это прекрасно работает.Проблемы сокета на языке Python

Когда я пытаюсь подключиться к клиенту python, клиент python может получать данные с сервера, но когда он отправляет данные, сервер, похоже, никогда не получит его.

Я могу видеть только данные на сервере, когда я пытаюсь отправить 500K + байты. Пока я могу видеть данные, они неполны и не синхронизированы.

Я тестировал follwing пример кода, и она отлично работает с питоном: http://norwied.wordpress.com/2012/04/17/how-to-connect-a-python-client-to-java-server-with-tcp-sockets/

Единственное реальное отличие состоит в том, что в коде из ссылки он использует:

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
PrintWriter out = new PrintWriter(client.getOutputStream(), 

Где, как и в моем сервере Я использую:

streamOut = new DataOutputStream(new BufferedOutputStream(s.getOutputStream())); 
streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream())); 

Может ли это быть причиной?

ответ

1

В вашем примере кода PrintWriter был настроен на автозапуск. Это означает, что когда вызывается println(), буфер будет очищен и, следовательно, отправлен в сеть. Однако вы используете BufferedOutputStream и, вероятно, забыли flush() вашего OutputStream.

+0

Да, похоже, эта проблема, но в данный момент я не нашел способ сбросить буфер в python. Кажется, он полагается на EOL для отправки. Есть ли альтернативный способ сделать его flush? – DevilCode

+0

Есть ли способ flush()? – kutschkem

+0

, к сожалению, нет. Мы перекодировали в java, все хорошо сейчас =) – DevilCode

0

Я думаю, что ваш клиент python не смывает поток, поэтому сервер java получает данные только после того, как буфер на клиенте заполнен.

Смежные вопросы