С каким хостом я должен связать сокет прослушивания? - PullRequest
4 голосов
/ 27 мая 2010

Я использовал модуль сокета python и попытался открыть сокет прослушивания, используя

import socket
import sys

def getServerSocket(host, port):
    for r in socket.getaddrinfo(host, port, socket.AF_UNSPEC,
                                socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
        af, socktype, proto, canonname, sa = r
        try:
            s = socket.socket(af, socktype, proto)
        except socket.error, msg:
            s = None
            continue
        try:
            s.bind(sa)
            s.listen(1)
        except socket.error, msg:
            s.close()
            s = None
            continue
        break
    if s is None:
        print 'could not open socket'
        sys.exit(1)
    return s

Где хост был None, а порт был 15000.

Затем программа будет принимать подключения, но только от подключений на одном компьютере. Что мне нужно сделать, чтобы принимать соединения из Интернета?

Ответы [ 3 ]

8 голосов
/ 27 мая 2010

Попробуйте 0.0.0.0. Это то, что в основном используется.

5 голосов
/ 27 мая 2010

Первая проблема заключается в том, что ваши блоки исключений глотают ошибки, а отчеты не создаются. Вторая проблема заключается в том, что вы пытаетесь привязать к определенному интерфейсу, а не INADDR_ANY. Вы, вероятно, привязываетесь к «localhost», который будет принимать соединения только с локальной машины.

INADDR_ANY также известен как константа 0x00000000, но макрос более значим.

Предполагая, что вы используете IPv4 (то есть "обычный интернет" в наши дни), скопируйте код сокета / привязки из первого примера на странице модуля сокетов .

1 голос
/ 27 мая 2010

Вам необходимо привязать ваш общедоступный IP-адрес или «все» адреса (обычно обозначаемые как «0.0.0.0»).

Если вы пытаетесь получить к нему доступ через сеть, вам также может понадобиться учесть брандмауэры и т. Д.

...