2012-05-27 3 views
3

У меня есть два модуля W1 и M2, которые подключаются к моей точке доступа. У меня есть Android-телефон, который подключается к той же точке доступа. У меня есть сервер сокетов на моем телефоне Android, и два модуля присоединяются к серверу в качестве клиентов. Теперь мой вопрос: можно ли отправить строковое сообщение с моего телефона на модуль M1 без необходимости отправлять что-либо в M2. Я хочу выбрать между клиентами для отправки сообщения. Возможно ли это на Java?Отправить сообщение с базового сервера конкретному клиенту

Хорошо, здесь идет.

//setting up server 
ServerSocket serverSocket = new ServerSocket(8000, 0, IPaddress); 

//creating a client socket to accept it 
Socket clientSocket = serverSocket.accept(); 

Теперь я принимаю клиент в отдельном потоке, так что основной поток не замерзает becauz accept() функции блокировки.

Я не знаю, как создать новый поток каждый раз, когда подключается новый клиент. Также я не знаю, как ограничить количество клиентов, которые могут подключаться. Мне нужно не более 5 клиентов и не более.

ответ

2

Да, это возможно. Вам необходимо поддерживать отдельное подключение к каждому клиенту. Класс ServerSocket имеет функцию accept(), которая возвращает объект Socket. Этот объект представляет собой соединение между двумя точками, вашим сервером и одним клиентом. Вы можете вызвать ServerSocket.accept() несколько раз в цикле, чтобы принимать все входящие соединения. Каждый возвращаемый объект Socket будет для другого клиента.

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

Сообщите свой код, если у вас все еще есть проблемы.

UPDATE, потому что вы добавили код на вопрос: см. Android Documentation о создании потоков. Это будет много читать за пределами этого сообщения в stackoverflow.

Как принимать соединения и запуск потоков, просто сделать это в цикле:

for(int i = 0; i<5; i++){ 
    clientSocket = serverSocket.accept(); 
    // start a new thread, passing it the clientSocket as an argument 
} 

Другие, возможно, полезные ссылки: https://developer.android.com/resources/articles/painless-threading.html https://developer.android.com/guide/topics/fundamentals/processes-and-threads.html

+0

о человеке ты просто гений. Я не мог бы это сказать лучше. Я знал, что это возможно, просто не знал, как его реализовать. У меня есть мой код, но я не знаю, как это сделать. когда я копирую и вставляю его, появляется как хлам. Как мне отправлять коды, как и другие люди, при переполнении стека? –

+0

положите 4 пробела перед каждой строкой вашего кода. Кнопка '{}' над вашей записью при редактировании будет пытаться сделать это автоматически, но она не всегда работает. Ниже окна редактирования вашего сообщения является предварительный просмотр. Кроме того, если мой ответ решит вашу проблему, не стесняйтесь щелкнуть галочкой рядом с ним, чтобы указать, что проблема решена и дать мне правильный ответный бонус. – kaz

+0

сладкий. Ты мужчина. плохо дать это выстрел. Вернитесь с кодом в 15 минут –

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