Локальный UDP-клиент Python не будет принимать сообщения от локального сервера при использовании имени хоста - PullRequest
0 голосов
/ 07 декабря 2018

Я слежу за книгой "Основы сетевого программирования Python".У него есть пример сервера / клиента UDP, который может отправлять сообщения друг другу.Вот как это выглядит

import socket, sys
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

MAX = 65535
PORT = 1060

if 2<= len(sys.argv) <=3 and sys.argv[1] == 'server':
    interface = sys.argv[2] if len(sys.argv) > 2 else ''
    s.bind((interface, PORT))
    print('Listening at {}'.format(s.getsockname()))
    while True:
        data, address = s.recvfrom(MAX)
        print('The client at {} says: {}'.format(address, repr(data)))
        msg = 'Your data was {} bytes'.format(len(data))
        s.sendto(msg.encode('utf-8'), address)

elif len(sys.argv)==3 and sys.argv[1]=='client':
    hostname = sys.argv[2]
    s.connect((hostname, PORT))
    print('Client socket name is {}'.format(s.getsockname()))
    s.send(b'This is another message')
    s.settimeout(5.0)
    data = s.recv(MAX)
    print('The server says', repr(data)) code here

Я запускаю сервер на своей локальной машине:

python listing2-2.py server
Listening at ('0.0.0.0', 1060)

Затем я запускаю свой клиент

python listing2-2.py client 127.0.0.1    
Client socket name is ('127.0.0.1', 59535)
The server says b'Your data was 23 bytes'

И всехорошо.Я могу использовать localhost, и это тоже работает.Но если я использую свое имя хоста

python listing2-2.py client <myhostname>
Client socket name is ('127.0.0.1', 45677)

, и время ожидания клиента истечет.Сервер получает сообщение от клиента (я вижу вывод «Это другое сообщение» на стороне сервера), но клиент, похоже, отказывается от сообщения от сервера.Я пытаюсь понять, почему.

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