1. 程式人生 > 實用技巧 >Python實現簡單聊天,同步輸入和接收訊息

Python實現簡單聊天,同步輸入和接收訊息

查的資料很多都是必須等待接收資料後才能再次輸入。做了修改,使用多執行緒的形式,實現一邊輸入,一邊接收

服務端程式碼

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 not
data: 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()