J'ai écrit un script de chat de base Python en utilisant socket. Cela fonctionne, mais pas comme je le souhaiterais.mon chat python socket de base a quelques problèmes
Lorsque Client1 envoie msg, seulement après client2 envoie msg, client2 obtiendra le msg de client1, etc
Je sais qu'il ya bibliothèque appelée mscvrt
quelque chose peut me aider, mais je ne sais pas comment utiliser il (un peu nouveau à ce sujet. Je sais aussi que je suis censé faire de la méthode receive ne bloque pas par la bibliothèque Select.
Comment puis-je utiliser l'entrée et la recv de ne pas ainsi le blocage?
C'est le code du serveur:
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)
C'est le code client (très basique):
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))
votre recv est seulement après votre envoi. Vous devriez les créer dans des fils séparés ou bien il les enverra toujours et seulement ensuite les recevront. – IsaacDj
@IsaacDj Pouvez-vous expliquer comment, ou écrire le code s'il vous plaît? –