2013-06-18 4 views
1

Итак, для проекта я делаю небольшой одноранговый клиент с двумя людьми, использующий Java в среде NetBeans.Клиент чата - сокет и серверный сокет одновременно

У меня вопрос не совсем о коде, а о структуре и о том, как ее реализовать.

То, что я хочу сделать, это есть клиент с открытым и имеют ServerSocket прослушивания любых соединений, которые пытаются быть сделаны из другого клиента, используя Socket (этот другой клиент тоже должен иметь ServerSocket) Так идея что оба клиента имеют возможность принимать соединение после открытия клиента и иметь возможность попробовать и установить соединение.

В любом случае, проблема заключается в том, что ServerSocket.Accept(); блоки (правильная терминология?) Программа, как только она вызывается до окончания тайм-аута. Я хочу, чтобы ServerSocket просто прослушивал в фоновом режиме любые входящие соединения и подключал их, если это так, без полного отключения функции программы (то есть, пользователь мог инициировать подключение самостоятельно), пока это происходит? Для этого мне нужно создать отдельный поток для ServerSocket, который был убит после того, как соединение было выполнено?

Также, как только соединение было выполнено, как мне заставить программу периодически проверять входной поток Socket, чтобы узнать, есть ли входящие сообщения от другого клиента?

Есть ли способ, которым я могу достичь этого в одном потоке? (Я еще не изучал нити)

Прошу прощения, если это немного шире.

Большое спасибо!

+0

Не бойтесь использовать несколько потоков. Как только вы сделаете что-то с Swing или AWT, у вас будет много потоков. Так что не «убегайте» от потоков - попробуйте «приручить» их ... – mschenk74

+0

Можете ли вы указать мне куда-нибудь, что объясняет темы? Я думаю, что это лучший способ сделать то, что я хочу здесь. – Jackles

+0

Учебники, которые я использовал для обучения в 1997 году, больше не являются онлайн. Мне придется снова искать в Интернете. Страницы Angelika Langer, а также те, что Ларс Фогель - хорошее начало для поиска хорошей информации и учебных материалов, связанных с java. – mschenk74

ответ

1

ServerSocket блоки и все.

Но если вам нужна только одноранговая связь между двумя связанными сторонами, и не более того, это не проблема. Вам просто нужны две программы: сервер и клиент. Серверный блок, пока он не получит соединение с клиентскими и клиентскими блоками, пока не получит соединение.

Если вы хотите реализовать Java IO в одном потоке, вы должны использовать Java Nio. В Интернете есть много учебных пособий. Например, http://tutorials.jenkov.com/java-nio/server-socket-channel.html.

Также кажется, что вы не очень знакомы с сетями и сокетами, поэтому было бы полезно использовать некоторый слой вместо сырых сокетов.

Возможно, вам стоит рассмотреть JeroMQ (https://github.com/zeromq/jeromq) для реализации связи между программами.

+0

Что такое слой? – Jackles

+0

Кроме того, что такое JeroMQ, я не могу найти нигде, что объясняет это. – Jackles

+0

В слое программирования это абстракция, которая скрывает детали реализации на низком уровне и, возможно, предлагает некоторые дополнительные функции. В этом случае, если вам нужен только рабочий одноранговый чат, может быть проще использовать некоторую библиотеку высокого уровня вместо использования сырых сокетов. – Panu

1

Если вы хотите отправить сообщение всем подключенным клиентам, это может помочь вам link.

+0

Очень интересно спасибо! – Jackles

+0

У меня вопрос. В источнике он создает поток. Как он знает, что делать. Он просто автоматически запускает public void Run() после него? – Jackles

+0

Вы должны вызвать метод start: new Thread (nrw Runnable() {..}). Start(); – Panu

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