python socket多线程实现客户端与服务器连接
程序员文章站
2022-06-18 13:51:21
python socket多线程实现客户端与服务器连接,供大家参考,具体内容如下之前因为一些作业需要完成一个服务器监听多个客户端的程序,于是就用python写了这样的程序。话不多说,直接上代码。ser...
python socket多线程实现客户端与服务器连接,供大家参考,具体内容如下
之前因为一些作业需要完成一个服务器监听多个客户端的程序,于是就用python写了这样的程序。话不多说,直接上代码。
server代码:
import json import socket import threading import time import struct class server(): def __init__(self): self.g_conn_pool = {} # 连接池 # 记录客户端数量 self.num =0 # 服务器本地地址 self.address = ('0.0.0.0', 8000) # 初始化服务器 self.server_socket = socket.socket(socket.af_inet, socket.sock_stream) self.server_socket.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1) self.server_socket.bind(self.address) self.server_socket.listen(128) def accept_client(self): """ 接收新连接 """ while true: client_socket, info = self.server_socket.accept() # 阻塞,等待客户端连接 print(client_socket,port) # 给每个客户端创建一个独立的线程进行管理 thread = threading.thread(target=self.recv_msg, args=(client_socket,info)) thread.setdaemon(true) thread.start() def recv_msg(self,client,info): # 提示服务器开启成功 print('服务器已准备就绪!') client.sendall("connect server successfully!".encode(encoding='utf8')) # 持续接受客户端连接 while true: try: client.sendall(b'success') while true: msg = client.recv(1024) msg_recv = msg.decode('utf-8') if not msg_recv: continue else: recv_time = time.strftime("%y-%m-%d %h:%m:%s", time.localtime()) print('客户端 ' + recv_time + ':\n') print(' ' + msg_recv + '\n') except exception as e: print('客户端断开连接...') exit(-1) break def start_new_thread(self): """启动新线程来接收信息""" thread = threading.thread(target=self.accept_client, args=()) thread.setdaemon(true) thread.start()
server服务器类,主要是监听以及接收客户端的信息。
#实例化一个flask节点 app = flask(__name__) @app.route('/') def hello(): return 'hello' if __name__ == '__main__': #创建解析器 from argparse import argumentparser parser = argumentparser() parser.add_argument('-p', '--port', default=5030, type=int, help='port to listen on') args = parser.parse_args() #获取端口号 port = args.port #实例化一个server类 并启动 py_server = server() py_server.start_new_thread() #启动flask节点 app.run(host='127.0.0.1',port=port)
client代码
class client(): def __init__(self): #服务器ip与端口 self.server_address = ('127.0.0.1', 8000) self.num = 0 def recv_msg(self): print("正在连接服务器....") # 客户端连接服务器 while true: try: self.client_socket = socket.socket(socket.af_inet, socket.sock_stream) #连接服务器 self.client_socket.connect(self.server_address) num = self.num # 制作报头 header_dic = { 'filename': num } header_bytes = json.dumps(header_dic).encode('utf-8') self.client_socket.send(struct.pack('i', len(header_bytes))) self.client_socket.send(header_bytes) #接收信息 while true: msg_recv = self.client_socket.recv(1024).decode('gbk') print(msg_recv) if msg_recv == 'success': print('客户端已与服务器成功建立连接...') elif not msg_recv: continue else: recv_time = time.strftime("%y-%m-%d %h:%m:%s", time.localtime()) print( '服务器 ' + recv_time + ':\n') print(' ' + msg_recv + '\n') except: print('与服务器断开连接...') break def start_new_thread(self): """启动新线程来接收信息""" thread = threading.thread(target=self.recv_msg, args=()) thread.setdaemon(true) thread.start() def main(): wf = client() wf.start_new_thread() while true: a = input() wf.client_socket.send(a.encode('utf-8')) if __name__ == '__main__': main()
以上为客户端程序的代码。
下面是运行的结果:
服务器端:
多个客户端:
代码实现还是蛮容易的,具体可以自行修改使用。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
Python—实现sftp客户端(连接远程服务器)
-
网络套接字socket,利用UDP协议实现服务器与客户端通信
-
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
-
python之socket(三)实现ftp客户端和服务器收发文件及md5加密文件
-
C#使用Socket实现服务器与多个客户端通信(简单的聊天系统)
-
Python实现的FTP通信客户端与服务器端功能示例
-
python实现TCP服务器端与客户端的方法详解
-
python socket多线程实现客户端与服务器连接
-
Python3学习(六):使用socket实现TCP协议的简单服务器和客户端
-
java网络编程 多线程服务器与客户端系统架构 socket应用