python - 如何使用 python 套接字连接不同网络上的 2 台计算机
问题描述
我正在尝试连接不同网络上的两台不同计算机,但出现错误:
TimeoutError: [Errno 110] 连接超时
有时我得到这个错误:
OSError: [Errno 113] 没有到主机的路由
我编写了server.py
脚本并在第一台电脑和client.py
第二台电脑上启动它。
server.py
import socket
server_socket = socket.socket()
server_socket.bind(("127.0.0.1", 80))
server_socket.listen(1)
(client_socket, client_address) = server_socket.accept()
print ("client_connected [" + client_address[0] + "]")
client_command = client_socket.recv(1024).decode()
print(client_command.encode())
client.py
import socket
client_socket = socket.socket()
client_socket.connect(("server_public_ip_here", 8820))
client_command = input("command: ")
client_socket.send(client_command.encode())
data = client_socket.recv(1024).decode()
print("server: " + data)
我希望在计算机之间建立连接,但不断获得TimeoutError
或OSError
解决方案
如果您在两台不同的计算机上,则应绑定到0.0.0.0
(以侦听所有网络连接)或服务器的 IP 以在该 IP 上进行连接,而不是127.0.0.1
( localhost
)。如果客户端和服务器都在同一台机器上,则可以使用。此外,您应该在客户端和服务器上使用相同的端口。
我测试了它并且它有效:
服务器.py
import socket
server_socket = socket.socket()
server_socket.bind(("0.0.0.0", 8000))
server_socket.listen(1)
(client_socket, client_address) = server_socket.accept()
print ("client_connected [" + client_address[0] + "]")
client_command = client_socket.recv(1024).decode()
print(client_command.encode())
客户端.py
import socket
client_socket = socket.socket()
client_socket.connect(("127.0.0.1", 8000)) #or enter ip of server
client_command = input("command: ")
client_socket.send(client_command.encode())
data = client_socket.recv(1024).decode()
print("server: " + data)
推荐阅读
- python - 如何使用 django-marshmallow 序列化一个简单的字典?
- php - 如何从另一台设备访问在我的服务器上运行的 php 网页?
- javascript - 如何从折线图.js 中获取最后一个值
- excel - 我在行中的 10 个单元格中生成随机数 -1 或 1,其中 vba 中随机数的总和始终等于 + 值
- r - 如何按日期对数据帧进行子集化并在 R 中执行多个操作?
- security - 使用 Rust Rocket Web 框架保存 ApiKey 的安全解决方案是什么?
- c - 访问内存地址后无法访问指针中的值
- aws-api-gateway - MOCK AWS API 网关中的客户端证书
- django - 在 Django 表单集中隐藏 can_delete 字段
- r - 从 paste0() 打印出一个在另一个的顶部作为字符类