Python Socket Connection зависает в другом экземпляре, но работает в одном и том же экземпляре - PullRequest
0 голосов
/ 24 января 2019

В настоящее время я использую два разных экземпляра AWS, чтобы попытаться установить связь, используя два файла python: один клиент и один сервер.Один экземпляр, Server, имеет копию файла сервера и файла клиента.Другой экземпляр, Клиент, имеет только копию файла клиента.

Проблема в том, что когда я запускаю файл клиента на экземпляре Сервера, он работает, как и предполагалось.Однако, когда я запускаю файл клиента на экземпляре Client, он зависает при вызове socket.connect.

server.py

import socket
# create a socket object
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# get local machine name. I have also used ''
host = socket.gethostname()
# I use this print to set the host name in the client file.
print(host)

port = 12000 

# bind to the port
serversocket.bind((host, port))

# queue up to 5 requests
serversocket.listen(5)

while True:
    # establish a connection
    clientsocket,addr = serversocket.accept()
    print("Got a connection from %s" % str(addr))

    msg='Thank you for connecting'+ "\r\n"
    clientsocket.send(msg.encode('ascii'))
    clientsocket.close()

client.py

import socket
# create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# host is hard-coded to the output of the server file's gethostname() result
# hard-coded value from server.py
host = '###.##.##.##'
port = 12000

# connect. This is where the code hangs when run in the terminal
s.connect((host, port))

# Receive no more than 1024 bytes
msg = s.recv(1024)
s.close()
print (msg.decode('ascii'))

Я также проверил свою группу безопасности на экземплярах AWS.У них обоих одинаковая группа безопасности, которая включает в себя:

Custom ICMP Rule - IPv4 Echo Reply N/A 0.0.0.0/0 ICMP
Custom ICMP Rule - IPv4 Echo Reply N/A ::/0 ICMP

, которая, по моему мнению, должна позволить вещам работать правильно.

Я не уверен относительно того, где я могу пойти не так.Я уверен, что оба клиентских файла одинаковы и оба сервера имеют одинаковую группу безопасности.Я прочитал, что socket.gethostname () должен возвращать значение, доступное для общественности, поэтому я не думаю, что мой адрес хоста неправильный.Номер порта также правильный.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 24 января 2019

Моя проблема в том, что мне не хватало правила TCP с источником, разрешающим "Anywhere". У меня сложилось впечатление, что ICMP - единственное правило, которое мне нужно, учитывая мое назначение, но, похоже, это не так. Спасибо за помощь.

...