Python實現簡單聊天,同步輸入和接收訊息
阿新 • • 發佈:2021-01-12
查的資料很多都是必須等待接收資料後才能再次輸入。做了修改,使用多執行緒的形式,實現一邊輸入,一邊接收
服務端程式碼
import socket import threading import sys import time spaces = " " * 50 # 主要是為了讓輸入和接收的訊息區分開 def send_message(conn): while True: sys.stdout.write("\r") data = input("%sInput:" % spaces).strip().encode('utf-8') if notdata: continue conn.send(data) def receive_message(conn): while True: messages = conn.recv(1024) messages_format = "\rReceived[{}] :{}\n{}Input:".format(time.strftime("%Y-%m-%d %H:%M:%S"), messages.decode('utf-8'), spaces) sys.stdout.write(messages_format) def server_start(): sock = socket.socket() sock.bind(('localhost', 8080)) sock.listen(1) # 實現連結迴圈 print("Waiting for user ...") while True: conn, addr = sock.accept() print("User is online ...") threading.Thread(target=receive_message, args=(conn,)).start() threading.Thread(target=send_message, args=(conn,)).start() if __name__ == '__main__': server_start()
客戶端程式碼
import socket import threading import sys import time spaces = " " * 50 # 主要是為了讓輸入和接收的訊息區分開 def send_message(socket_send): while True: messages = input("%sInput:"%spaces).strip().encode('utf-8') if not messages: continue else: socket_send.send(messages) def recevice_message(socket_receive): while True: data = socket_receive.recv(1024) messages_format = "\rReceived[{}] :{}\n{}Input:".format( time.strftime("%Y-%m-%d %H:%M:%S"), data.decode('utf-8'), spaces) sys.stdout.write(messages_format) def client_start(): sock = socket.socket() sock.connect(('localhost', 8080)) threading.Thread(target=send_message, args=(sock,)).start() threading.Thread(target=recevice_message, args=(sock,)).start() if __name__ == '__main__': client_start()