python 使用socket制作聊天室
1.基本前提
为什么socket能做聊天室呢
- socket提供了通信的服务 比如你可以创建tcp udp的请求 向某个主机发起通信
就像是你想和某人说话 你得会发音- 就是提供了服务端的方式和客户端的方式
服务端处理用户发起的请求
客户端发送数据和接收服务端的响应数据
就像你打开浏览器看视频 你作为客户端 发起请求 在某处的服务端(web服务器)会把请求接受处理
返回相应的数据 通过浏览器(客户端)接受解析 就变成了看的见的网页数据
想搞定聊天室
1.需要一个服务端提供下服务
- 时刻接受链接进来的用户
- 接受用户的发送信息
- 对所有的用户发送广播 这样都能收到
2.需要多个客户端
1.链接进入聊天室
2.发送数据
3.接受广播数据
基本关系
2.服务端的搭建
1.导入socket包 创建通讯tcp等请求
导入threading包 使用线程来处理那些请求数据
import socket
import threading
#全局变量
SERVER_HOST = 'localhost'
SERVER_PORT = 8000
BUFFER_SIZE = 1024
2.创建socket的实例tcp通信对象
socket.AF_INET, socket.SOCK_STREAM 是创建tcp的参数
百度可以了解更多 比如udp等
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
3.绑定端口 服务的套接字 也就是IP地址+端口号
server_socket.bind((SERVER_HOST, SERVER_PORT))
server_socket.listen(5) # 监听 最大可以链接的数量
4.进入循环中 等待客户端的链接
while True:
client_socket, addr = server_socket.accept()
5.把链接的客户存放起来
# 存放链接进来聊天的用户
clients = []
while True:
client_socket, addr = server_socket.accept()
clients.append(client_socket)
使用线程 给进入的用户分配处理函数
# 开启线程
handle_client处理函数
client_socket 参数
thread = threading.Thread(target=handle_client, args=(client_socket,))
thread.start()
handle_client的定义
1.客户端第一次进来 需要输入自己的名称
def handle_client(client_socket):
"""处理客户端连接"""
name = client_socket.recv(BUFFER_SIZE).decode()#接受客户端发来的名称
print(f'[*] {
name} 已连接')#服务端打印查看
welcome = f'欢迎来到聊天室, {
name}!\n'.encode()
client_sock