为什么我的Socket Client不允许python 3中的传出连接?

时间:2018-04-08 18:22:51

标签: python-3.x amazon-web-services sockets networking udp

我在python3中创建了一个非常简单的UDP套接字客户端和服务器。 我正在尝试将简单的消息'hello'发送到服务器,我收到错误:

ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it

我不确定它实际上是目标计算机的故障,因为目标计算机是AWS EC2 Ubuntu实例,其中“允许所有流量”配置了安全组。

我确信它必须是我桌面计算机上的某种出站策略......

感谢任何帮助。

这是我的代码:

client.py

import socket

client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect(('servers public ipv4 ip', 8089))
client_sock.send('hello'.encode())

server.py

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 8089))
s.listen(5) #5 connections

while True:
    conn, addr = s.accept()
    buffer = conn.recv(64)
    if len(buffer) > 0:
        print(buffer.decode())
        break

1 个答案:

答案 0 :(得分:3)

首先,尽管您使用UDP重复声明(在正文和标签中),但您实际上正在使用TCP,这可以从您使用SOCK_STREAMaccept看出。

 s.bind(('localhost', 8089))

您明确将服务器绑定到localhost。但是localhost只是计算机(127.0.0.1)的环回接口,无法从外部访问。如果您想接受来自其他系统的连接,您需要绑定到特定网络接口的IP地址,或者广泛地绑定到0.0.0.0 - 或者只需使用s.bind('',8089)