如何解决在我按Enter之前,不要从套接字programmig,python中的另一个客户端获取消息
我正在使用Python套接字编程制作一个聊天应用程序,为此我也参考了senddex教程。 我的问题是,当我运行此脚本时,它可以正常运行。但是问题是client1发送时 将消息发送到终端中的client2,然后client2必须按下enter按钮才能获得从client1发送的消息,这与client1的情况相同。 那么,如何避免这种情况呢?我想通过通过不按输入键来将消息从一个客户端发送到另一个客户端!
以下是代码: server.py
import socket
import select
ip = "127.0.0.1"
port = 5556
ss = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ss.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
ss.bind((ip,port))
ss.listen()
socket_lists = [ss]
client = {}
def recv_msgs(cs):
try:
msg_head = cs.recv(10)
if not len(msg_head):
return False
msg_lnth = int(msg_head.decode('utf-8'))
a = {'header': msg_head,'data': cs.recv(msg_lnth)}
print(a)
return a
except:
return False
print("Server listening on")
while True:
read_s,_,exe_s = select.select(socket_lists,[],socket_lists)
for evry_sckt in read_s:
if evry_sckt == ss:
conn,addr = ss.accept()
user = recv_msgs(conn)
if user is False:
continue
socket_lists.append(conn)
client[conn] = user
print(client)
print("A new connection.")
else:
msg = recv_msgs(evry_sckt)
if msg is False:
print("closed connection !")
socket_lists.remove(evry_sckt)
del client[evry_sckt]
continue
user = client[evry_sckt]
print("msg recieved !")
for clients_sckt in client:
if clients_sckt != evry_sckt:
clients_sckt.send(user['header']+user['data']+msg['header']+msg['data'])
for evry_sckt in exe_s:
socket_lists.remove(evry_sckt)
del client[evry_sckt]
以下是代码: client.py
import socket
import sys
ip = "127.0.0.1"
port = 5556
myusername = input("Enter the username :")
cs = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
cs.connect((ip,port))
cs.setblocking(False)
username = myusername.encode('utf-8')
username_header = f"{len(username):<{10}}".encode('utf-8')
cs.send(username_header + username)
while True:
msg = input(f"[{myusername}] : ")
if msg:
msg = msg.encode('utf-8')
msg_head = f"{len(msg):<{10}}".encode('utf-8')
cs.send(msg_head+msg)
try:
username_header = cs.recv(10)
if not len(username_header):
print("connection is closed !")
sys.exit()
username_lnth = int(username_header.decode('utf-8'))
username = cs.recv(username_lnth).decode('utf-8')
message_header = cs.recv(10)
msg_lnth = int(message_header.decode('utf-8'))
msg = cs.recv(msg_lnth).decode('utf-8')
print(f"[{username}] : {msg}")
except:
continue
请帮助,我被卡住了!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。