Python socket实现简单聊天,同步输入和接收消息

查的资料很多都是必须等待接收数据后才能再次输入。做了修改,使用多线程的形式,实现一边输入,一边接收

服务端代码

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()

 

posted @ 2021-01-12 16:25  JCL_1023  阅读(357)  评论(0编辑  收藏  举报