сервер и его порт
никаких наверное :D он так и делает. так и только так.
А мне всегда казалось что все работает по другому:
1 Клиент коннектится к порту сервера
2 Сервер получает запрос на коннект и создает дополнительный порт и из этого порта отправляет ответ клиенту.
3 Клиент получает ответ от сервера и в дальнейшем ведет общение с дополнительным портом. А главный порт продолжает ожидать соединения других клиентов
А мне всегда казалось что все работает по другому:
1 Клиент коннектится к порту сервера
2 Сервер получает запрос на коннект и создает дополнительный порт и из этого порта отправляет ответ клиенту.
3 Клиент получает ответ от сервера и в дальнейшем ведет общение с дополнительным портом. А главный порт продолжает ожидать соединения других клиентов
ладно, а как тогда сервер может "заставить" клиента перепдоключиться на другой порт? Если допутим сервер будет через данный (самый первый) порт посылать клиенту куда подключиться, а в это же время подключится еще кто-нить?
Вот в Delphi есть TServerSocket - все чрез один порт делает...
ладно, а как тогда сервер может "заставить" клиента перепдоключиться на другой порт? Если допутим сервер будет через данный (самый первый) порт посылать клиенту куда подключиться, а в это же время подключится еще кто-нить?
Вот в Delphi есть TServerSocket - все чрез один порт делает...
Это тебе только так кажется так как там скрыты некоторые аспекты его работы (Ты почитал бы о работе класса Socket и сразу разобрался т.к. он в отличии от классов в Delphi и MFC работает на более "низком уровне").
И хочу заметить что схема работы сервера описанная ранее относится к протоколу TCP/IP
И хочу заметить что схема работы сервера описанная ранее относится к протоколу TCP/IP
описанная ранее - вряд ли.
классическая схема работы сервера выглядит так:
1. получаем дескриптор сокета - socket
2. делается привязка сокета к адресу:порту - bind
3. сокет помечается как прослушивающий listen, после этого по netstat -a можно увидеть комбинацию его адреса и слушающего порта с пометкой LISTEN
4. далее запускается функция accept, после приема соединения которой, порождается процесс потомок, либо запускается новый обрабатывающий поток.
короче - со стороны сервера всегда участвует одна и та же комбинация адрес:порт. противоречия в этом нет, так как для ОС соединение описывается полной комбинацией "локальный адрес:локальный порт" и "удаленный адрес:удаленный порт".
убедится в этом можешь так. запусти на своей машине скажем telnet сервер и коннектись к ней. потом, после установления соединения, см. netstat -n.