我正在尝试使用tkinter作为GUI来创建消息传递应用程序。我想在接收一条消息时调用一个函数,该函数实际上会显示一条消息,但是使用while循环有时会崩溃或破坏我的GUI上的更新。
连接到服务器后,我尝试调用子程序...
const dueDateOrdering = item => item.status === 'OPEN' && item.dueDate ? 0 : 1;
const byOpenDueDate = (a, b) => dueDateOrdering(a) - dueDateOrdering(b);
const statusOrdering = {
OPEN: 0,
COMPLETED: 1,
CANCELLED: 2
};
const byStatus = (a, b) => statusOrdering[a.status] - statusOrdering[b.status];
const byCreateDate = (a, b) => a.createdDate.localeCompare(b.createdDate);
this.items = this.items.sort((a, b) =>
byOpenDueDate(a, b)
|| byStatus(a, b)
|| byCreateDate(a, b)
);
这没有用,我认为这是因为while循环(因为连接后我会崩溃)
现在,我只想在收到消息时尝试调用子程序。
这是我的server.py脚本
def get_msg(): # This will run code that will get messages
while True:
Crecv = clientsocket.recv(1024).decode() # Waits for a message
print(Crecv) # Prints whatever the server has sent into console
messages.insert(END, Crecv) # Insets the message into the message Listbox
这是我稍后会更新的内容,这就是为什么有一些未使用的列表等的原因。
这个想法是...。客户端连接到服务器->客户端发送一条消息-> server.py将解码该消息,然后将其发送给所有连接的人-> OP客户端将重新接收该消息并进行它会显示出来,其他客户只会收到消息并显示出来。
这是我在项目结束时想要实现的目标,但是当我的客户端在连接后崩溃时,我什至无法连接到服务器。
我从名为client.py的项目的非GUI版本复制了所有套接字代码
from socket import *
import socket
import select
## -- Server (Rooms) -- ##
users = []
addresses = []
host_name = socket.gethostname()
HOST = socket.gethostbyname(host_name)
PORT = 12345
print(f"Server Info\nHOST: {HOST}\nPORT: {PORT}")
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind((HOST, PORT))
serversocket.listen(5)
clientsocket, address = serversocket.accept()
def user_join():
# Append username to users[]
# Append user address to adresses[]
print(f"{address} connecting (nicked {username})")
clientsocket.send(f"{username} joined the room!").encode()
print(address)
with clientsocket:
while True:
Srecv = clientsocket.recv(1024).decode()
print(f"{address}: {Srecv}")
# Add server time to message before sending
clientsocket.sendall(Srecv.encode())