python - 试图在 python 中创建一个带有套接字的服务器
问题描述
我正在尝试用 Python 制作一个聊天应用程序,但遇到了一些麻烦。我创建了一个服务器,可以使用本地 IP 地址成功连接。但是,当我尝试使用我的公共 IP 地址在另一台设备上连接到它时,似乎超时,没有发生错误,并且它一直在尝试连接。
编辑:我已经为我的 IPv4 地址设置了端口转发。并且客户端正在使用公共 IP。
服务器.py:
import socket
s = socket.socket()
host = socket.gethostbyname(socket.gethostname())
port = 2000
s.bind((host, port))
print("Server started, waiting for incoming connections")
s.listen(5)
connection, address = s.accept()
print("New connection from", address)
while True:
data = connection.recv(1024).decode()
print("received:", data)
ret = data + "+++++++"
connection.send(ret.encode())
客户端.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = #my public ip address from whatsmyip.com
port = 2000
s.connect((host, port))
print("Connected.")
while True:
message = input("msg: ")
s.send(message.encode())
data = s.recv(1024).decode()
print(data)
解决方案
那么,首先,您的服务器是否在与其他设备的网络中?如果您在那里有路由器,那么您在 whatsmyip.com 中看到的 IP 是路由器的 IP,而不是您计算机的 IP。所以你会试图连接到它。
您可以使用命令netstat进行检查。
推荐阅读
- windows - Lua 5.4 源代码包含在 c++Builder 10.1 中不太正确
- javascript - Javascript 承诺 + useState + firebase onSnapshot
- javascript - 在 Redux 中分派多个 reducer 和 case 是一个好习惯吗?
- android - 如何将不同的主题应用于单一活动方法
- apache-spark - Spark 流式传输是否需要 HDFS 和 Kafka
- tiled - 如何在对象层中插入多个图块?
- javascript - 使用 matchMedia,调整窗口大小以修复响应式浏览边缘情况
- python - 虽然猜谜游戏中的函数不断循环,python
- spring-boot - Spring-Boot 2.3.1 -Dspring-boot.run.arguments 不起作用
- react-native - 用不透明度反应原生图像背景,而不是文本