Я пытаюсь создать клиент-серверную программу на Java. На самом деле клиенты могут связаться с моим сервером, поскольку для моего маршрутизатора настроен переадресация на порт 7777. Поэтому я получаю их сообщения в порядке. Как только я получаю сообщение от клиента, я держу объект сокета открытым (я не закрываю поток ввода или вывода), а затем пытаюсь отправить сообщение обратно. Я вообще не получаю никаких исключений, поэтому я уверен, что сообщение доставляется на IP-адрес сокета, я даже попытался отправить и ответить на свой собственный серверный компьютер, и он отлично работает. Итак, что происходит, так это то, что, сохраняя сокет, я действительно знаю IP-адрес от клиента, и сообщение попадает на маршрутизатор клиента. Я думаю, что это не происходит, так это то, что маршрутизатор не доставляет сообщение этому клиенту, так как он не должен его знать. Я сейчас потерялся, теперь меня сводит с ума. СпасибоНе удается ответить на не локальный сокет в Java
ответ
Может быть, вы можете попробовать метод flush().
Возможно, сервер закрывает сокет, и вы не подключены. В java есть разные методы, чтобы проверить это, мало работ и немногих нет. Вот подробности о том, что вы должны сделать, чтобы проверить, подключен ли клиент или нет:.
socket.getInputStream() следующим образом() делает поток в состояние ожидания ввода до тех пор, пока подключен клиент, и, следовательно, делает ваша программа ничего не делать - если только вы получите некоторый входной сигнал возвращает -1, если клиент отключен
socket.isConnected() возвращает всегда верно, как только клиент подключается (и даже после отключения) странно !!
out.checkError() верно, как только клиент отключен
Единственный способ действительно узнать, читая (вы получите -1 в качестве возврата значение) или письменной форме (IOException (сломанный трубопровод) будет сброшен) на связанных с входом/выходом потоках .
Как только вы уверены, что вы подключены к серверу, вам нужно только перейти, чтобы узнать, что-то не так с маршрутизатором или сетью.
Надеюсь, это поможет!
' Socket.isConnected() 'сообщает вам, * * вы когда-либо подключали' Socket'. Он ничего не говорит о текущем состоянии * соединения. * 'Out.checkError()' возвращает true * после того, как * при записи было 'IOException', потому что' PrintStream' и 'PrintWriter' подавляют исключения, что является хорошей причиной не использовать их по сети. Он не * * * становится правдой, как только клиент отключился. Чтение также может вызывать 'IOException', а не возвращать -1, если соединение было прервано. Слишком много ошибок здесь. -1 – EJP
@EJP FYI Socket.isConnected не работает. Вы можете попробовать это для себя. checkError() Сбрасывает поток и проверяет его состояние ошибки, и, следовательно, возвращает true, если отключен. –
@JunedAhsan - Мы это знаем! Если вы хотите понять, почему, прочитайте javadoc. Нет ничего «странного» в отношении метода, который ведет себя точно так, как указано для его поведения.Единственное «странное» дело в том, что вы не удосужились прочитать javadoc в первую очередь :-) –
- 1. Не удается ответить $ _GET
- 2. не удается передать файл через сокет, java
- 3. Угловой - Не удается ответить на маршрут
- 4. Не удается открыть сокет
- 5. Не удается связать подключенный сокет
- 6. Не удается ответить pdf-файл в цикле
- 7. Не удается отправить сообщение через Java-сокет, не закрывая его
- 8. Java сокет не удается подключиться к собственному компьютеру
- 9. Не удается открыть веб-сокет
- 10. paramiko.Proxycommand не удается установить сокет
- 11. Не удается открыть сокет C++
- 12. Android: не удается создать сокет
- 13. Не удается ответить на сообщения пользователя в консоли разработчика Android
- 14. Не удается ответить на входящий вызов в android marshmallow 6.0
- 15. Не удается отобразить локальный адрес IP-на локальный
- 16. Не удается открыть локальный хост?
- 17. Не удается загрузить локальный файл
- 18. Не удается разобрать локальный json
- 19. Не удается воспроизвести локальный видеофайл
- 20. Не удается установить локальный файл цепочки сертификатов
- 21. Не удается подключить веб-сокет с javascript
- 22. Java-апплет: сокет не подключен
- 23. Не удается воспроизвести локальный аудиофайл в UIWebView
- 24. Не удается разрешить локальный var в контексте
- 25. Не удается открыть сокет с Python
- 26. Сокет Java: Чтение не возвращается
- 27. Java-сокет не принимает данные
- 28. Не удается ответить в netty с помощью udp socket
- 29. Не удается отправить несколько сообщений через сокет
- 30. Не удается отправить файл через сокет C
Показать код. Или еще лучше, только соответствующие части кода. –
Как вы это тестируете? Telnet на ваш сервер? –
Я бы посоветовал 'ping' как серверу, так и клиенту посмотреть, доступны ли они с обоих концов. –