D'abord j'écrire un ChatServerPython TCP Program, le chat à son tour, fonctionne bien d'abord, mais de toute façon il a bloqué?
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import socket, threading, time
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 9999))
s.listen(3)
print('waiting for someone to chat with...')
def chatpro(sock, addr):
print('Connection with %s:%s established!'%addr)
sock.send(('Welcome: %s:%s'%addr).encode('utf-8'))
while True:
data = sock.recv(1024)
if data.decode('utf-8') == 'exit':
sock.send(('Bye: %s:%s' % addr).encode('utf-8'))
break
print('From %s:%s: \n'%addr, data.decode('utf-8'))
print('Please say something:')
smg = input()
sock.send(smg.encode('utf-8'))
sock.close()
print('Connection closed!')
while True:
sock, addr = s.accept()
t = threading.Thread(target=chatpro, args=(sock, addr))
t.start()
et le client
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 9999))
print(client.recv(1024).decode('utf-8'))
while True:
print('please say something:')
smg = input()
client.send(smg.encode('utf-8'))
re = client.recv(1024).decode('utf-8')
print(re)
if re[:3] == 'Bye':
print('Connection closed')
break
client.close()
Le client va d'abord dire quelque chose au serveur, et dire le serveur à son tour quelque chose au client. Cela fonctionne bien. Mais si j'ai tapé accidentellement une entrée supplémentaire ou que je n'ai pas dit quelque chose à son tour, alors le programme sera bloqué? Puis j'ai tapé quelque chose dans le serveur et le client et rien ne s'est passé, pourquoi? Merci !!!
N'utilisez jamais 'socket' directement. Toujours utiliser 'twisted' ou équivalent. – o11c