вопрос взаимодействия клиент-сервер - PullRequest
0 голосов
/ 12 февраля 2011

Я пытаюсь реализовать минимальный чат-сервер в Java по обычному протоколу TCP.Сервер чата будет прослушивать определенный порт.У меня вопрос: если несколько клиентов отправляют сообщения на один и тот же порт, может ли сервер различать клиентов и отвечать на них по отдельности, если сообщения не содержат IP-адрес или имя назначения клиента?

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

 "user: abc to-user:efg message:"Hello""

Могу ли я узнать в Java адрес клиента, который отправил пакет, и ответить на тот же адресили мне нужно будет включить какой-либо идентификатор в само сообщение, например "sender-ip = 1.1.1.1"

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

Несколько клиентов никогда не будут отправлять данные через один и тот же порт.Единственный раз, когда ваши клиенты будут общаться через один и тот же порт, это когда они будут подключаться к серверу.На сервере каждый раз, когда ServerSocket получает соединение, он возвращает новый Socket.Этот сокет является комбинацией следующего: IP-адрес сервера + ServerPort и IP-адрес клиента + клиентский порт.IP-адрес сервера и порт сервера будут одинаковыми для каждого сокета;что отличается - это IP-адрес клиента и порт.Обычно этот сокет передается в новый поток для дальнейшей связи, в то время как ServerSocket возвращается для прослушивания входящих соединений.Получив ссылку на сокет, вы можете позвонить socket..getInetAddress().getHostAddress(), чтобы получить удаленный IP, и socket.getPort(), чтобы получить порт соответствующего клиента.

1 голос
/ 12 февраля 2011

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

...