首页 > 编程知识 正文

python3,全民一起玩python实战篇

时间:2023-05-06 06:38:29 阅读:60435 作者:2573

# ------------------------------服务器端-----------------------------------------# auther: kele# 创建时间:2019/1/3 18:42# 导入socket包import socket, threading# 创建一个socket对象server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 获取本地iphost = socket.gethostname()# 给定端口port = 9090# 给服务器IP和端口server.bind((host, port))# 最大连接数server.listen(5)print('输入enter退出服务器')# 创建一个客户端列表clients = list()# 存放已经创建线程的客户端end = list()# 阻塞式等待客户端连接,返回连接对象,与间接对象地址def accept(): while True: client, addr = server.accept() clients.append(client) print("r"+'-'*5+f'服务器被{addr}连接: 当前连接数:-----{len(clients)}'+'-'*5, end='')def recv_data(client): while True: # 接受来自客户端的信息 try: indata = client.recv(1024) except Exception as e: clients.remove(client) end.remove(client) print("r" + '-' * 5 + f'服务器被断开: 当前连接数:-----{len(clients)}' + '-' * 5, end='') break print(indata.decode('utf-8')) for clien in clients: # 转发来自客户端的信息,发给其他客户端 if clien != client: clien.send(indata)def outdatas(): while True: # 输入要给客户端的信息 print('') outdata = input('') print() if outdata=='enter': break print('发送给所有人:%s'% outdata) # 给每个客户端发信息 for client in clients: client.send(f"服务器:{outdata}".encode('utf-8)'))def indatas(): while True: # 循环出连接的客户端,并创建相应线程 for clien in clients: # 若是线程已经存在则跳过 if clien in end: continue index = threading.Thread(target = recv_data,args = (clien,)) index.start() end.append(clien)# 建立多线程# 创建接受信息,线程对象t1 = threading.Thread(target = indatas,name = 'input')t1.start()# 创建发送信息,线程对象t2 = threading.Thread(target = outdatas, name= 'out')t2.start()# 等待客户连接,线程对象t3 = threading.Thread(target = accept(),name = 'accept')t3.start()# 堵塞县城知道子线程执行完毕,主线程才能结束# t1.join()t2.join()# 关闭每一个服务器for client in clients: client.close()print('-'*5+'服务器断开连接'+'-'*5)# -----------------------------------客户端--------------------------------------------# -*- coding: UTF-8 -*-# auther: kele# 创建时间:2019/1/3 19:24# 导入socket包import socket, threading# 创建客户端对象client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 目标主机host = input('输入目标ip')while True: name = input('请输入个人昵称, 不得超过十个字符,少于一个字符') if 1<len(name)<10: break# 目标端口port = 9090# 连接客户端client.connect((host, port))print('-'*5+'已连接到服务器'+'-'*5)print('-'*5+'输入enter关闭与服务器的连接'+'-'*5)def outdatas(): while True: # 输入要发给服务器的信息 outdata = input('') print() if outdata=='enter': break # 发送给服务器 client.send(f'{name}:{outdata}'.encode('utf-8')) print('%s:%s'% (name, outdata))def indatas(): while True: # 接受来自服务器的信息 indata = client.recv(1024) # 将接受到的信息,进行编码 print(indata.decode('utf-8'))# 建立多线程# 建立接受信息,线程对象t1 = threading.Thread(target=indatas, name='input')# 建立输出信息,线程对象t2 = threading.Thread(target=outdatas, name='out')# 启动多线程t1.start()t2.start()# 阻塞线程,直到子线程执行结束,主线程才能结束。# t1.join()t2.join()# 关闭连接print('-'*5+'服务器断开连接'+'-'*5)client.close()

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。