【问题标题】:Why is my Socket Client not allowing the outgoing connection in python 3?为什么我的套接字客户端不允许 python 3 中的传出连接?
【发布时间】:2018-09-18 03:51:46
【问题描述】:

我在 python3 中创建了一个非常简单的 UDP Socket 客户端和服务器。 我正在尝试向服务器发送简单的消息“你好”,但出现错误:

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

【问题讨论】:

  • 顺便说一句,client_sock.send('hello'.encode()) 编码为本地客户端的默认编码。您应该定义此通道的编码并明确使用它。

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


【解决方案1】:

首先,尽管您一再声称(在正文和标签中)您使用的是 UDP,但您实际上使用的是 TCP,这可以从您对 SOCK_STREAM 和 accept 的使用中看出。

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

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

【讨论】:

  • 谢谢你,Steffan,你帮了我很多:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 2017-03-14
相关资源
最近更新 更多