Системный вызов, известный как socket();
, создает сокет на сервере прослушивания.Я хочу понять, что сервер создает комбинацию IP + порт.Допустим, telnet использует порт 23. Теперь, когда клиентские машины устанавливают соединения, то порт, на котором сервер прослушивает, тогда соединение отсутствует на порте 23, фактически оно находится на другом порту. Моя путаница также на стороне сервера.происходит ли то же самое.Например, я пишу сервер для прослушивания порта 23, а затем соединения, которые будут выполняться на стороне сервера с разными клиентами, как они различаются, потому что все они будут на одном и том же порту. Так как вы можете сделать так много соединений на одном сервереport.If кто-то использует telnet (23) или ftp (21) или ssh (22), тогда многие люди все еще могут войти в один и тот же сервисный порт на сервере, то есть более чем одно соединение для ssh разными пользователями, где ssh только слушаетв порту 22. Так, что именно делает сокет или как создается сокет?
ОБНОВЛЕНИЕ
Я получил то, что объяснено. В зависимости от комбинации IP + портас клиентского компьютера, на котором возникло соединение, остальные вещи со стороны сервера могут быть обработаны, и я думаю, что эта информация, вероятно, используется дескрипторами файлов сокетов.Что я вижу в системном вызове connect()
, который мы используем следующим образом:
connect(sockfd,(struct sockaddr *)&client_address,size_t);
мы передаем struct sockaddr *
на стороне клиента, который имеет уникальную комбинацию IP + порт, я думаю, когда сервер получает это в acceptтогда все продолжается.Далее я хочу узнать аргумент на стороне сервера
accept(server_sockfd,(struct sockaddr *)&client_address,(size_t *)sizeof (struct sockaddr ));
Получает ли он тот же самый client_address, который со стороны клиента был передан с помощью системного вызова connect ()?Если да, то socket_descriptors для одного и того же сервера, прослушивающего много клиентов, различны. Я хочу знать, как поддерживается структура данных на стороне сервера, когда он принимает запрос от клиента.