我正在使用 Python 中的套接字库,并希望将客户端(我的计算机)连接到服务器(AWS EC2 Windows 实例)。但客户端总是给出错误:-“TimeoutError:[WinError 10060] 连接失败,因为连接的主机未能响应”
我已经实施的解决方案:-
- 编辑安全组以启用所需的传入端口。
- 为 EC2 实例分配静态 IP
- 重启 EC2
- 在 EC2 实例内从 Windows 防火墙启用传入端口
当我转到任务管理器>>性能>>资源监视器时,我可以看到端口是打开的:-
- 网络活动
图像 PID 地址 发送 (B/秒) 接收 (B/秒) 总计 (B/秒)
pythonw.exe 1456 EC2AMAZ-XXXXXX 627 647 1,274
- TCP 连接
图像 PID 本地地址本地端口远程地址远程端口数据包丢失 (%) 延迟 (ms)
pythonw.exe 1456 IPv4 环回 50770 IPv4 环回 50769 0 0
- 监听端口
图像 PID 地址 端口 协议 防火墙状态
pythonw.exe 1456 IPv4 环回 3469 TCP 允许,不受限制
但我仍然无法在所需端口 (telnet PUBLIC_IP PORT) 上 ping EC2。因此客户端无法通过套接字连接。
服务器端
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 3469
s.bind(('localhost', port))
print ('Socket binded to port 3469')
s.listen(1)
print ('socket is listening')
while True:
try:
print('waiting for connection')
connection, client_address = s.accept()
print ('Got connection from ', client_address)
data = connection.recv(16)
print('received {!r}'.format(data))
connection.close(); s.close();break;
except KeyboardInterrupt:
connection.close(); s.close();break;
客户端.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 3469
s.connect(('EC2-PUBLIC-IP-ADDRESS-OF-EC2-HERE', port))
z = 'Hello World'
s.sendall(z.encode())
s.close()
当服务器和客户端都在本地主机上时,此代码可以完美运行。
不知道缺少了什么。请帮忙。
感谢致敬
答案1
s.bind(('localhost',端口))
您似乎只监听localhost
环回地址,而无法在公共互联网上使用。