python软件开发一个聊天软件,了解一下,最初的聊天实现方式,本次用到socket编程,及多线程技术,测试开发入门小玩意,没事玩一玩,还是可以的。

话不多说,直接上代码:

一、1V1聊天代码实现:

创建两个文件,sock_server.py和sock_client.py文件:

1.1 sock_server.py

import socket

# 创建socket对象
sk=socket.socket()

# 连接服务器ip及商品
sk.connect(('127.0.0.1',9999))

# 向服务器发送信息,需要先转换格式【encode('utf-8'))】,才能被服务器识别
sen_data=input('输入要发送的内容:')
sk.sendall(sen_data.encode('utf-8'))

# 接收来自服务器的信息,接收到信息并非是字节,所以需要解码才能被正常识别
ser_data=sk.recv(1024).decode('utf-8')
print('接收到的服务端数据:',ser_data)

# 断开连接
sk.close()

1.2 sock_client.py

import socket

# 定义服务器ip、端口
ip_ad=('127.0.0.1',9999)

# 创建socket对象
sk=socket.socket()

# 绑定ip端口
sk.bind(ip_ad)

# 开启监听
sk.listen()
print('服务器已经开启......')

# 等待接收客户端信息
conn,addr=sk.accept()
print('客户端地址:',addr)

# 等待接收客户端信息,接收到信息并非是字节格式,所以需要解码才能被正常识别【decode('utf-8')】
cli_data=conn.recv(1024).decode('utf-8')
print('接收到的客户端数据:',cli_data)

# 发送信息给客户端,发送的信息非字节格式,需要先转换格式【encode('utf-8'))】
sen_data=input('输入要发送的内容:')
conn.sendall(sen_data.encode('utf-8'))

# 断开连接
sk.close()

1.3 运行

1.3.1 初始状态

分别运行服务器和客户端代码:

服务器

Python聊天系统功能设计 基于python的聊天软件_客户端


客户端

Python聊天系统功能设计 基于python的聊天软件_python_02

1.3.2 客户端发送消息,服务器接收消息

客户端

Python聊天系统功能设计 基于python的聊天软件_socket_03


服务器

Python聊天系统功能设计 基于python的聊天软件_python_04

1.3.3 服务器回复消息,客户端接收消息

服务器

Python聊天系统功能设计 基于python的聊天软件_python_05


客户端

Python聊天系统功能设计 基于python的聊天软件_服务器_06


一对一方式,发送一条消息,回复一条消息。enter键结束一条消息发送

二、多用户跟服务器聊天

分别创建三个文件:server.py、A_client.py、B_client.py

2.1 server.py

import socketserver


# 1. 继承一个类
class sqServer(socketserver.BaseRequestHandler):
    def handle(self) -> None:
        print('小可爱们,聊天服务器已上线......')

        while True:

            # 接收客户端数据
            client_data=self.request.recv(1024)
            print(client_data.decode('utf-8'))

            # 发送消息给客户端
            send_data=input('请输入内容:')
            self.request.sendall(send_data.encode('utf-8'))
        self.request.close()


# 2. 创建服务
server=socketserver.ThreadingTCPServer(('127.0.0.1',7777),sqServer)

# 3. 保持在线
server.serve_forever()

2.2 A_client.py

import socket

# 创建socket对象
sk=socket.socket()

# 连接服务器ip及商品
sk.connect(('127.0.0.1',7777))

while True:
    # 向服务器发送信息,需要先转换格式【encode('utf-8'))】,才能被服务器识别
    send_data='A: '+input('输入要发送的内容:')
    sk.sendall(send_data.encode('utf-8'))

    # 接收来自服务器的信息,接收到信息并非是字节,所以需要解码才能被正常识别
    server_data=sk.recv(1024).decode('utf-8')
    print('接收到的服务端数据:',server_data)

# 断开连接
sk.close()

2.3 B_client.py

import socket

# 创建socket对象
sk=socket.socket()

# 连接服务器ip及商品
sk.connect(('127.0.0.1',7777))

while True:
    # 向服务器发送信息,需要先转换格式【encode('utf-8'))】,才能被服务器识别
    send_data='B: '+input('输入要发送的内容:')
    sk.sendall(send_data.encode('utf-8'))

    # 接收来自服务器的信息,接收到信息并非是字节,所以需要解码才能被正常识别
    server_data=sk.recv(1024).decode('utf-8')
    print('接收到的服务端数据:',server_data)

# 断开连接
sk.close()

2.4 运行

分别运行三个文件,并且实现交互,查看最后结果:

2.4.1 初始状态

服务器:

Python聊天系统功能设计 基于python的聊天软件_socket_07


A用户:

Python聊天系统功能设计 基于python的聊天软件_Python聊天系统功能设计_08


B用户:

Python聊天系统功能设计 基于python的聊天软件_python_09

2.4.2 A和B分别向服务器发送消息,服务器接收到消息

A用户

Python聊天系统功能设计 基于python的聊天软件_客户端_10


B用户:

Python聊天系统功能设计 基于python的聊天软件_客户端_11


服务器接收:

Python聊天系统功能设计 基于python的聊天软件_Python聊天系统功能设计_12

2.4.3 服务器回复消息,A和B收到消息

服务器回复

Python聊天系统功能设计 基于python的聊天软件_python_13


A收到的服务器消息

Python聊天系统功能设计 基于python的聊天软件_socket_14


B收到的服务器消息

Python聊天系统功能设计 基于python的聊天软件_python_15

可以看到,多用户对服务器发起聊天,服务器会根据用户发送的时间先后,进行优先回复,并不需要指定A或B。而且,服务器回复完后,可以继续发送消息,此时,如果A先回复,则服务器刚发送的消息立即回复A。

可能有点绕,练下手,就知道了。