python3.6环境下利用TCP传输控制协议模拟实现的端对端的聊天功能

版权声明:CSDN 博主刘康康 https://blog.csdn.net/liiukangkang/article/details/83032384

服务端源代码

"""
TCP完整版聊天室端对端开发(服务端)
version 1.1.0
author lkk
Email [email protected]

"""
# 引入所需模块

import socket, threading
import logging
# 定义服务器信息


HOST = ''
PORT = 8888
ADDRESS = (HOST, PORT)
BUFFER = 1024

client = dict()


def engine():
    # 创建连接对象
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定主机信息
    server.bind(ADDRESS)
    # 开始监听
    server.listen(128)
    # 等待客户端连接
    logging.log(60, '等待客户端连接')
    while True:
        s_socket, address = server.accept()
        print('客户端{}连接成功'.format(address))
        # 向连接成功的客户端发送信息
        s_socket.send('请输入您的昵称'.encode('utf-8'))
        # 接受用户发送的昵称信息
        name = s_socket.recv(BUFFER).decode('utf-8')
        client[name] = (s_socket, address)

        c1 = threading.Thread(target=transfer_message, args=(s_socket,), name=name)
        c1.start()


def transfer_message(s_socket):
    """消息的转发"""
    while True:
        msg = s_socket.recv(BUFFER).decode('utf-8')
        # 转发指定昵称的客户端
        nickname = msg.split(':')[0]
        print(nickname)
        # 得到指定客户端
        target_client = client[nickname][0]
        # 给目标用户发送消息
        msg = "\n"+threading.current_thread().name + ":" + msg.split(':')[1]
        target_client.send(msg.encode('utf-8'))


if __name__ == '__main__':
    logging.debug('debug')
    engine()

客户端源代码

"""
TCP完整版聊天室端对端开发(客户端)
version 1.1.0
author lkk
Email [email protected]

"""
# 引入模块
import socket, threading

# 定义服务器信息
HOST = '192.168.11.203'
PORT = 8888
ADDRESS = (HOST, PORT)
BUFFER = 1024


def core():
    """主函数:负责创建套接字、连接指定主机"""
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 连接服务器
    client.connect(ADDRESS)
    # 接受服务器发送的提示信息
    msg = client.recv(BUFFER).decode('utf-8')+':'
    name = input(msg)
    # 将昵称发送给服务器
    client.send(name.encode('utf-8'))
    # 与服务器进行通信
    sending = threading.Thread(target=send_message, args=(client,))
    accept = threading.Thread(target=accept_message, args=(client,))

    sending.start()
    accept.start()


def send_message(client_socket):
    """发送消息函数"""
    while True:
        msg = input('发送消息[昵称:内容]')
        client_socket.send(msg.encode('utf-8'))


def accept_message(client_socket):
    """接收消息函数"""
    while True:
        info = client_socket.recv(BUFFER)
        print('0.0 :', info.decode('utf-8'))


if __name__ == '__main__':
    core()

运行该程序时只需运行一个服务端  运行多个客户端就能够实现客户端之间的信息发送

操作说明
启动服务端程序  保持一直运行状态
运行多个客户端程序  首先提示用户输入昵称   当有多个用户成功连接到服务器时  只要按照[昵称:内容]这个样式即可将消息发送给某用户

猜你喜欢

转载自blog.csdn.net/liiukangkang/article/details/83032384