Как подключиться к удаленному компьютеру с помощью socket?

Рейтинг: 0Ответов: 1Опубликовано: 15.12.2014

Пытаюсь связаться с удаленным компьютером с помощью модуля socket, то есть есть клиент/сервер.
У меня вопрос: если в сервере указано, например

portsock = socket(AF_INET, SOCK_STREAM)
portsock.bind((myHost, myPort))

то в клиенте я должен коннектиться соответственно с теми же myHost, myPort?

sock.connect((myHost, myPort))

На тестах по локалке все работает. Попытался подключиться удаленно - не работает. Время ожидания истекло.

Ответы

▲ 2Принят

Как подключиться к удаленному компьютеру с помощью socket?

  1. Знать его имя (hostname). Или если имя сервера неизвестно, то можно использовать nslookup myip.opendns.com resolver1.opendns.com, чтобы найти его внешний адрес
  2. Убедиться, что исходящие/входящие соединения к данной машине, порту разрешены (настройки межсетевых экранов локальных/удалённых).

Например, чтобы подключиться к time.nist.gov серверу по порту 37, можно использовать socket.create_connection():

#!/usr/bin/env python
import socket
import struct
from contextlib import closing
from datetime import datetime, timedelta

def rfc868time2utc(ts, epoch=datetime(1900, 1, 1)):
    """http://tools.ietf.org/html/rfc868"""
    return epoch + timedelta(seconds=ts)

address = "time.nist.gov", 37 # rfc 868
with closing(socket.create_connection(address, timeout=5)) as sock:
    buf = sock.recv(4)
    while len(buf) < 4:
        buf += sock.recv(3)
    ts, = struct.unpack('!I', buf[:4])
    print(rfc868time2utc(ts).isoformat() + 'Z')