广东h5网站建设,网站的根目录怎么找,微信公众号免费导入wordpress,唐山营销型网站制作基于Socket的聊天室Python开发一、Socket简述二、创建服务端Server2.1 创建服务端初始化2.2 监听客户端连接2.3 处理客户端消息三、创建客户端Client3.1 创建服务端初始化3.2 发送消息3.3 接收消息3.3 线程工作3.4 线程工作是不是挺好玩的呢#xff1f;也可以作为课程设计哦也可以作为课程设计哦如果需要源码可以关注我弓中皓查看历史文章。关注“测试开发自动化” 弓中皓获取更多学习内容 一、Socket简述
SOCKET它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定一台计算机可以接收其他计算机的数据也可以向其他计算机发送数据。
Socket的主要的工作模式如下
我们就用上面的模式来开发一个聊天室工具主要的开发模块包括两部分
客户端开发服务端开发
可以部署在同一电脑上由于我只有一台电脑所以我将服务端和客户端都部署在了我自己的电脑上。你也可以部署在同一局域网的不同电脑上或使用其他的不同服务器进行部署效果展示
如果你们公司的网络是不允许接入互联网的那么你可以偷偷做一个局域网内的聊天小软件用于你跟心爱的女孩子之间聊天。哈哈哈哈。。
二、创建服务端Server
创建服务端的流程大致可以分为以下几个步骤 1创建客户端套接字(socket)对象 2绑定IP地址和端口号 3设置监听 4等待接受客户端的连接请求 5接受数据 6发送数据 7关闭客户端套接字(socket)
2.1 创建服务端初始化
该部分主要用于初始化服务端创建一个Severt类它不断监听客户端的发送的请求。
class Server:def __init__(self):self.server socket.socket() # 创建客户端套接字(socket)对象self.server.bind((192.168.20.164, 8989)) # 绑定IP地址和端口号self.server.listen(15) # 设置监听 15表示服务端等待排队连接的最大数量self.clients [] # 用于存放客户端的响应信息self.clients_name_ip {} # 用与存放客户端名称与IPself.get_conn() # 监听客户端连接2.2 监听客户端连接
通过设置一个死循环 让我们的服务端不断处于监听客户端的连接请求。一旦客户端发起一个连接请求accept()方法会返回当前连接的客户端的socket连接对象和IP地址。 通过 print(cilent)可以看到
socket.socket fd460, familyAddressFamily.AF_INET, typeSocketKind.SOCK_STREAM, proto0, laddr(192.168.20.164, 8989), raddr(192.168.20.164, 59239)此时服务器会向客户端输入一条信息data服务端需要将该信息编码encode发送给客户端。同时客户端接收到该信息后需要将其节码才能转为我们可以识别的内容。
def get_conn(self):while True:client, address self.server.accept() # 等待接收连接请求print(IP为{}的使用者正在请求连接。.format(address))data 与服务器链接成功请输入昵称才可以聊天client.send(data.encode()) # server与client通信send() decodeself.clients.append(client) # 链接用户添加到服务器的用户列表Thread(targetself.get_msg, args(client, self.clients,self.clients_name_ip, address)).start()2.3 处理客户端消息
为将发送的名称与IP进行绑定需要将客户端发送的用户名内容解码追加到clients_name_ip参数中。此时一旦客户端发来连接请求并输入了昵称那么昵称就会被解码存储在name变量中。
此时服务端开始循环监听该客户端的消息。并且不断将客户端发来的消息进行解码。并将消息通过for循环的形式重新编码发送给所有的客户端。
另外如果检测到客户端发来的消息是一个Q字符那么客户端就会被关闭。
def get_msg(self, client, clients, clients_name_ip, address):name client.recv(1024).decode() # 接受客户端发来的昵称print(昵称:【{}】 设置成功.format(name))clients_name_ip[address] name # 昵称与IP进行绑定while True: # 循环监听客户端消息try:recv_data client.recv(1024).decode()except Exception as e:self.close_client(client, address)break# 入如果用户输入Q推出if recv_data.upper() Q:self.close_client(client, address)breakfor c in clients:c.send((clients_name_ip[address] time.strftime(%x)\nrecv_data).encode())三、创建客户端Client
创建客户端的流程大致可以分为以下几个步骤 1创建客户端套接字(socket)对象 2和服务器端套接字(socket)建立连接 3发送数据 4接受数据 5关闭客户端套接字(socket)
3.1 创建服务端初始化
客户端采用PyQT5将客户端做成界面的形式进行交互。这里不对PyQT5做过多的解释。此处讲解使用的PyQT5比较简单重点对服务端socket开发进行讲解。
首先创建客户端socket对象并连接服务器端口并开启工作线程。
class Client(QWidget):def __init__(self):super(Client, self).__init__()self.setGeometry(600, 300, 360, 300)self.setWindowTitle(聊天室)self.add_ui() # 界面UI这个跟socket无关self.client socket.socket() # 与服务器链接self.client.connect((127.0.0.1, 8989))self.work_thread() # 调用线程3.2 发送消息
发送消息通过的是用户点击发送按钮点击发送按钮以后QT会以信号的形式触发执行send_msg函数。至此消息会被解码发送给服务器如果检测到发送消息是字符‘Q’那么客户端会被退出。
def btn_send(self): # 发送按钮点击信号发射self.button.clicked.connect(self.send_msg)
def send_msg(self): # 检测到发送按钮点击该客户端就会向服务端发送数据msg self.message.text()self.client.send(msg.encode())if msg.upper() Q:self.client.close()self.destroy()self.message.clear()3.3 接收消息
通过接收消息将接收后的消息解码通过append的形式追加到QT的控件中用于在界面中显示
def recv_msg(self):while True:try:data self.client.recv(1024).decode()print(data)data data \nself.content.append(data)except:exit()3.3 线程工作
通过调用该方法来启动发送消息线程、接收消息线程。 def work_thread(self):Thread(targetself.btn_send).start() # 发送消息Thread(targetself.recv_msg).start() 3.4 线程工作
第一步启动服务器Server 第二步启动一个Client (pycharm) 第三步再启动一个Client (cmd) 是不是挺好玩的呢也可以作为课程设计哦如果需要源码可以关注我弓中皓查看历史文章。
关注“测试开发自动化” 弓中皓获取更多学习内容