python - 来自不同设备的 Python Socket 连接不起作用
问题描述
我用 python 在本地服务器上创建了一个小型聊天应用程序。当我在自己的计算机上运行客户端代码时,它工作正常,但是当我在另一台设备上尝试它时,它说:[WinError 10061] 无法建立连接,因为目标计算机主动拒绝它。我试图将主机设置为“”,我试图打开端口,但都没有成功。我应该怎么办?请不要提供诸如“它可能与您的防火墙有关”之类的答案,因为我已经知道了。我想一步一步确切地知道该怎么做,这样它才能真正起作用
我的服务器脚本:
import threading
import socket
name=socket.gethostname()
host=socket.gethostbyname(name)
port=5050
server=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen()
clients=[]
nicknames=[]
def broadcast(message):
for client in clients:
client.send(message)
def handle(client):
while True:
try:
message=client.recv(1024)
broadcast(message)
except:
index=clients.index(client)
clients.remove(client)
client.close()
nickname=nicknames[index]
broadcast(f"{nickname} left the chat".encode("ascii"))
nicknames.remove(nickname)
break
def recieve():
while True:
client,address=server.accept()
print(f"[NEW CONNECTION] {str(address)} connected with the server!")
client.send("NICK".encode("ascii"))
nickname=client.recv(1024).decode("ascii")
nicknames.append(nickname)
clients.append(client)
client.send("Welcome! you are connected to the server! have fun chatting!".encode("ascii"))
broadcast(f"{nickname} joined the chat!".encode("ascii"))
thread=threading.Thread(target=handle, args=(client,))
thread.start()
print("[LISTENING] server is started and is listening...")
recieve()
我的客户端脚本:
import threading
import socket
print("choose a nickname")
nickname=input()
host=socket.gethostbyname(socket.gethostname())
port=5050
client=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
def recieve():
while True:
try:
message=client.recv(1024).decode()
if message=="NICK":
client.send(nickname.encode("ascii"))
else:
print(message)
except:
print("an error occurred")
client.close()
break
def write():
while True:
message="{}: {}".format(nickname, input(""))
client.send(message.encode("ascii"))
recieve_thread=threading.Thread(target=recieve)
recieve_thread.start()
write_thread=threading.Thread(target=write)
write_thread.start()
解决方案
当我在另一台设备上尝试时它说:[WinError 10061] 无法建立连接
这个其他设备到底是什么?它位于哪里?你在哪里打开插座?
我假设你正试图打开一个到服务器的套接字,在这种情况下,你必须在你的套接字客户端之前运行服务器,然后再运行你的套接字程序,否则你会得到一个no connection
错误。
推荐阅读
- mysql - Elasticsearch 会更好地与像 MongoDB 这样的文档数据库或像 MySQL 这样的关系数据库一起工作吗?
- python - 如何使用 autouse 全局定义补丁?
- javascript - 在firebase中选择内部循环?
- android-studio - 如何向数字类型的 EditText 添加分数?
- python - Django 索引未考虑现有表
- c++ - c ++将equal_to设置为模板类的默认模板参数
- python - 模块“tensorflow.python.keras.utils.generic_utils”没有属性“populate_dict_with_module_objects”
- laravel - Laravel 7 - 更新信息后注销特定用户
- api - Vue路由器:如何将数据传递给默认/初始路由
- uber-api - 如何找到我的 store_id 以用于 Uber Eats api