2015-08-03 6 views
-2

У меня есть мой планшет Android (сервер), и у меня есть мой Samsung S3 (клиент 1) и Samsung S4 (клиент 2). У меня есть они оба подключаться (или, может быть, я не создал новый поток за соединение, которое приходило) на мой планшет (сервер), я их в списке, и я создал меню, и когда я постучал по списку, он поднимет меню и отправит команду последнему подключенному устройству (клиент 2), даже если я нажал на клиента 1.Обмен сообщениями потокового сокета

Как я могу найти его там, где я могу общаться с клиентом 1 и клиентом 2 отдельно друг от друга? Нужно ли мне переключать выходной поток? (это даже вещь?) мне нужно использовать ip и порт для ответа? (опять же это даже вещь?)

Я надеюсь, что кто-то сможет мне помочь.

изменить; Это не проблема списка, потому что я не знаю, какую кодировку сокетов мне нужно будет делать, чтобы общаться с клиентами отдельно друг от друга.

+0

В общем, розетки на внешний вид сервера следующим образом: 'newclientsock = listensock.accept()' Теперь вы используете 'newclientsock' для связи с этим клиентом. Часто каждый клиентский сокет обрабатывается в своем потоке (хотя это не требуется, см. 'Select'). –

+0

Любой пример кода? если netclientsock использовался на каждом соединении, не было бы так же, как просить боб в комнате, и все были названы bob? – andyADD

+0

просто найдите «сокет программирование java», есть тысячи результатов. Когда вы вызываете 'accept', вы говорите« дождитесь нового соединения », и результатом этого вызова является новый сокет, определяющий соединение между вами и конкретным клиентом, который подключен. В соке есть нулевая двусмысленность. –

ответ

0

Примеры здесь взяты из Writing the Server Side of a Socket (oracle.com). I сильно предлагаю вам работать с этим примером кода как можно скорее. Это было бы далеким проще сделать это локально на вашем ПК, прежде чем вы начнете привлекать несколько беспроводных устройств. (Я никогда не понимал, почему люди пытаются откусить намного больше, чем они могут жевать, а затем получить разочарование и отказаться .... Учитесь ходить, прежде чем бежать!)

/** 
    * Create a new server socket. This represents a TCP socket 
    * in the LISTENING state, which means it is waiting for clients 
    * to connect. It is not associated with any client. 
    */ 
ServerSocket serverSocket = new ServerSocket(portNumber); 

/** 
* Wait for a client to connect. This call will block (not return) 
* until a client successfully connects to the server. 
*/ 
Socket clientSocket = serverSocket.accept(); 

/** 
* Whereas `serverSocket` represents the LISTENING socket, we 
* now have a `clientSocket`, which represents a single ESTABLISHED 
* connection with *a specific client*. 
*/ 

/* Use this to receive data from the client... */ 
clientSocket.getInputStream(); 

/* ... or this to send data to the client. */ 
clientSocket.getOutputStream(); 

/** 
* At this point, the server is not yet ready for any new connections 
* from new clients. We can choose to either: 
* o Handle this single connected clientSocket now, and deal with other 
* clients when we're finished with this one. 
* o Spawn a new thread to handle this clientSocket 
* 
* Either way, we must go back to the top, and try to `accept` 
* another connection. 
*/ 
+0

Johanthon Прошу прощения, я уже знаю об этом. и я делаю это локально в своей сети. после нескольких исследований я думаю, что я могу объяснить это лучше, по сути, как я могу сделать уникальный идентификатор для каждого подключенного сокета? Я читал что-то вроде использования хэш-таблицы или с помощью GUID, и кто-то сказал, что вы можете использовать идентификатор устройства и временную метку для генерации идентификатора для него, поэтому я могу отправлять команды на это конкретное устройство. – andyADD

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