我一直在使用 socket 和 tkinter 在 python 中创建一个聊天室应用程序。每当我尝试向服务器发送消息时,我都会收到以下错误:
<块引用>发送或接收数据的请求被禁止,因为套接字未连接并且(使用 sendto 调用在数据报套接字上发送时)未提供地址
我不确定是什么导致了这个问题。
代码:
print("Sending message from server")
for clientKey in data.sockets.keys():
data.sockets[clientKey]["socket"].send(bytes(f"{data.sockets['server']['username']}: {message}", "utf-8"))
log(f"{data.sockets['server']['username']}: {message}")
print("Sent message from server")
程序到达第一个打印语句。
对于上下文,我有一个 tkinter 文本小部件,函数 log(text)
只是将文本插入小部件中。它与套接字模块无关。对于更多上下文,这就是 data
类中客户信息的样子:
data.sockets["server"] = {"socket": sock,
"username": "Host",
"thread": threading.Thread(target = receiveMessages, daemon = True)}
data.sockets["server"]["thread"].start()
这是服务器的信息,但对于客户端来说是相同的布局。
答案 0 :(得分:0)
问题是我从未创建过 if clientKey != "server"
,这意味着每次我尝试从服务器发送消息时,它都会尝试向服务器发送消息,这显然是不可能的。