我的python基本套接字聊天有一些问题
问题描述:
我已经使用套接字编写了一个基本的Python聊天脚本。它正在工作,但不是我想要的。我的python基本套接字聊天有一些问题
当客户端1发送味精,客户机程序将只味精后,客户机程序将获得客户端1的味精,等
我知道有库调用mscvrt
东西能帮助我,但我不知道怎么用它(还挺新在此,我也知道我应该做的接收方法不被选择库阻挡。
如何使用该输入并没有阻止方式的recv?
这是服务器代码:
import socket
import select
server_socket = socket.socket()
server_socket.bind(('0.0.0.0', 23))
server_socket.listen(5)
open_client_sockets = []
messages_to_send = []
def send_waiting_messages(wlist):
for message in messages_to_send:
(client_socket1, data) = message
for new_socket in open_client_sockets:
if new_socket in wlist:
if new_socket is not client_socket1:
new_socket.send(data)
print 'msg sent'
messages_to_send.remove(message)
while True:
rlist, wlist, xlist = select.select([server_socket] + open_client_sockets, open_client_sockets, [])
for current_socket in rlist:
if current_socket is server_socket:
(new_socket, address) = server_socket.accept()
open_client_sockets.append(new_socket)
else:
data = current_socket.recv(1024)
if data is not "":
messages_to_send.append((current_socket, data))
send_waiting_messages(wlist)
这是客户端的代码(很基本的):
import socket
import select
my_socket = socket.socket()
my_socket = socket.socket()
my_socket.connect(('127.0.0.1', 23))
print('Welcome to the chat room . You can send messages here.')
print('Choose a nickname.')
nickname = raw_input()
while True:
txt = raw_input()
my_socket.send('[' + nickname + ']: ' + txt)
print (my_socket.recv(1024))
答
你的recv只是你发送之后。你应该在不同的线程中创建它们,否则他将一直发送并且只能接收。 在客户端和服务器端都使用threading module进行异步聊天。
此问题的回答here和其他许多问题。 祝你好运。
您的recv只有在您发送后。你应该在不同的线程中创建它们,否则他将一直发送并且只能接收。 – IsaacDj
@IsaacDj你能解释一下,或者写下代码吗? –