Как я могу отправлять и получать данные одновременно при программировании сокетов в Java с использованием многопоточности?
Я новичок в Java и пытаюсь написать программу, использующую сокет Datagram для отправки и получения пакетов между клиентом и сервером. Проблема в том, что когда курсор достигает receive()
линия, он застревает там, пока не прибудет пакет. За это время, как я могу отправить данные на другую сторону? Другими словами, как я могу отправлять и получать его одновременно, используя сокет дейтаграммы?
2 ответа
Вам нужны потоки (или NIO/ Netty, но это гораздо более продвинутый).
В основном блокирование ввода-вывода (как следует из названия) блокирует текущий поток при каждой операции чтения / записи, если он не может быть обработан за один раз. Таким образом, вам нужен второй поток для обработки записей. Каждый хороший учебник по сокетам Java будет включать пример многопоточного сервера.
Кажется, вы имеете в виду асинхронный ввод-вывод, и хотя это действительно достигается с помощью потоков и сокетов (как указано выше), лучше всего это сделать с помощью NIO: http://en.wikipedia.org/wiki/New_I/O
Он гораздо лучше масштабируется и основан на событиях, что гораздо легче понять, чем многопоточность, при условии, что у вас нет большого опыта работы с IO и сетями. И вы можете избежать некоторых его сложностей, используя Apache MINA: http://mina.apache.org/