Программирование сокетов в Python - фактический удаленный порт - PullRequest
3 голосов
/ 16 марта 2011

В эти дни я немного занимался сетевым программированием на Python и хотел бы подтвердить поток, который, по-моему, происходит между клиентом и сервером:

  • Серверы слушают данные рекламируемый порт (9999)
  • Клиент подключается к серверу, создавая новый сокет (например, 1111)
  • Серверы принимают запрос клиента и автоматически порождают новый сокет (????), который теперь будет обрабатывать связь между клиентом и сервером

Как видите, в приведенном выше потоке задействованы 3 сокета:

  • Серверный сокет, который слушает клиентов
  • Сокет, порожденный клиентом
  • Сокет, порожденный сервером для обработки клиента

Мне известно о получении портов для первых двух сокетов (9999 и 1111), но я не знаю, как получить «реальный» порт, который связывается с клиентом на стороне сервера. Фрагмент, который я использую сейчас это:

def sock_request(t):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('localhost', 9999))
    print('local sock name: ' + str(s.getsockname()))
    print('peer sock name: ' + str(s.getpeername()))
    s.send('a' * 1024 * int(t))
    s.close()

Любая помощь в получении номера "порта" на сервере, который фактически общается с клиентом, будет высоко ценится. ТИА.

1 Ответ

4 голосов
/ 16 марта 2011

Новый сокет находится на том же порту. TCP-соединение идентифицируется 4 частями информации: IP-адрес источника и порт, а также IP-адрес и порт назначения. Поэтому тот факт, что у вашего сервера есть два сокета на одном и том же порту (то есть сокет прослушивания и принятый сокет), не является проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...