python网络通信器设计.docx

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
? ? python网络通信器设计 ? ? 总而言之、实现了简易的网络通信器,有群聊、单聊、控制、查看等的操作,完成了任务 不足:应用到了线程,在退出时并没有成功结束调度返回资源,而是将线程设为了守护线程,运行到了堵塞状态使程序不报错、后续学习了知识再来补充,也望大佬能评论赐教! 一、准备知识: 多套接字及多线程:** 进程与线程的区别: (可理解为一条马路-进程和马路上的多条车道-线程) 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位; 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信 号等),某进程内的线程在其他进程不可见; 调度和切换:线程上下文切换比进程上下文切换要快得多 为何不使用多进程而是使用多线程? 线程廉价,线程启动比较快,退出比较快,对系统资源的冲击也比较小。而且线程彼此分享了大部分核心对象(File Handle)的拥有权 二、通信器功能分析: tcp socket(通信质量保障) server: 群聊天(群聊窗口、接收消息后泛洪) 一对一(私聊窗口、接收消息后转发) 行为管理(只做了查看当前线程和关闭所有服务、未实现单个控制、也不难咯) 信息提示(进入或退出会输出提示) client: 群聊天(发给服务器让服务器去泛洪) 一对一(发给发服务器让服务器代发) 退出控制 三、编写代码+功能验证 server信息提示: 行为管理: server群发: server单发: 代码 #欢迎大佬指正和修改 import socket import threading import logging import datetime FORMAT = %(asctime)s %(threadName)s %(thread)d %(message)s logging.basicConfig(format=FORMAT, level=logging.INFO) class socketS(): #初始化,固定ip和port,绑定,监听 def __init__(self): address = (127.0.0.1, 9999) self.bufsize = 1024 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.bind(address) self.sock.listen() self.client_sock = {} #空字典放所有的client sock对象,{key:ip, value:sock} self.thread_accept = threading.Thread(target=self.accept, name=accept, daemon=True) self.thread_accept.start() #建立连接、记录 def accept(self): while True: sock, raddr = self.sock.accept() print(a new client connected!) logging.info(sock) logging.info(raddr) self.client_sock[raddr] = sock #线程传参、args=duple self.thread_recv = threading.Thread(target=self.recv, name=recv, daemon=True, args=(sock,)) self.thread_recv.start() #接收和群发 def recv(self, sock:socket.socket): while True: msg = sock.recv(self.bufsize).decode(gbk) # 单发 single_msg = msg.split(%%%) if len(single_msg)1: self.send(sing

文档评论(0)

科技之佳文库 + 关注
官方认证
内容提供者

科技赋能未来,创新改变生活!

版权声明书
用户编号:8131073104000017
认证主体重庆有云时代科技有限公司
IP属地浙江
统一社会信用代码/组织机构代码
9150010832176858X3

1亿VIP精品文档

相关文档