2017-05-31 42 views
-1

我已经使用套接字编写了一个基本的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)) 
+2

您的recv只有在您发送后。你应该在不同的线程中创建它们,否则他将一直发送并且只能接收。 – IsaacDj

+0

@IsaacDj你能解释一下,或者写下代码吗? –

回答

0

你的recv只是你发送之后。你应该在不同的线程中创建它们,否则他将一直发送并且只能接收。 在客户端和服务器端都使用threading module进行异步聊天。

此问题的回答here和其他许多问题。 祝你好运。