简易聊天软件开发(python+socket)

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 初始状态

分别运行服务器和客户端代码:
服务器
在这里插入图片描述
客户端
在这里插入图片描述

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

客户端
在这里插入图片描述
服务器
在这里插入图片描述

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

服务器
在这里插入图片描述
客户端
在这里插入图片描述
一对一方式,发送一条消息,回复一条消息。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 初始状态

服务器:
在这里插入图片描述
A用户:
在这里插入图片描述
B用户:
在这里插入图片描述

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

A用户
在这里插入图片描述
B用户:
在这里插入图片描述
服务器接收:
在这里插入图片描述

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

服务器回复
在这里插入图片描述
A收到的服务器消息
在这里插入图片描述
B收到的服务器消息
在这里插入图片描述

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

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

Python中的socket模块是用于网络编程的标准库,它提供了一种简单而强大的方式来创建网络应用程序。通过socket模块,你可以使用TCP或UDP协议在不同的计算机之间进行通信。 在Python中使用socket模块进行网络编程的基本步骤如下: 1. 创建一个socket对象,可以指定使用TCP或UDP协议。 2. 绑定socket到一个特定的IP地址和端口号。 3. 监听连接请求(仅适用于服务器端)。 4. 接受客户端的连接请求(仅适用于服务器端)。 5. 发送和接收数据。 下面是一个简单的示例代码,演示了如何使用Pythonsocket模块创建一个简单的服务器和客户端: 服务器端代码: ```python import socket # 创建一个socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定socket到本地地址和端口号 server_socket.bind(('localhost', 8888)) # 监听连接请求 server_socket.listen(5) print("服务器已启动,等待客户端连接...") while True: # 接受客户端的连接请求 client_socket, addr = server_socket.accept() print("客户端已连接:", addr) # 接收客户端发送的数据 data = client_socket.recv(1024).decode() print("接收到客户端的数据:", data) # 发送响应数据给客户端 response = "Hello, client!" client_socket.send(response.encode()) # 关闭客户端连接 client_socket.close() ``` 客户端代码: ```python import socket # 创建一个socket对象 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务器 client_socket.connect(('localhost', 8888)) # 发送数据给服务器 data = "Hello, server!" client_socket.send(data.encode()) # 接收服务器的响应数据 response = client_socket.recv(1024).decode() print("接收到服务器的数据:", response) # 关闭连接 client_socket.close() ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值