Я хочу написать tcp сервер и клиентское приложение, которое имеет несколько разных соединений друг с другом, где клиент использует один и тот же номер порта.
Насколько я понимаю, на сервере есть порт слушателя, и когда клиент вызывает его, я получаю новый сокет для этого нового соединения на стороне сервера, когда я вызываю
accept();
Правильно?Поэтому на стороне сервера я могу идентифицировать свое соединение с этим новым сокетом и отправлять данные через него.
Теперь у меня проблема с клиентской стороной.Там я получаю свой сокет, когда я звоню
socket(AF_INET, SOCK_STREAM, 0)
, поэтому у меня есть только один сокет.В
connect()
я могу указать удаленный адрес и так далее.Поэтому, когда я правильно понимаю, я могу использовать один сокет, чтобы сделать несколько соединений с разными парами адресов / портов, чтобы создать разные соединения.Правильно?
Но как теперь узнать в клиенте, с какого логического соединения я получаю свои данные, или как я могу отправить его, когда 2 логических соединения используют один и тот же локальный порт на клиенте?На сервере у меня есть 2 сокета, когда у меня есть 2 принятых вызова, но как насчет стороны клиента?Для отправки и получения у меня есть только один дескриптор сокета?
Или мне нужно вызывать socket () для каждого логического соединения на клиенте?