电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

python socket實現(xiàn)聊天室

瀏覽:27日期:2022-06-15 10:41:26

本文實例為大家分享了python socket實現(xiàn)聊天室的具體代碼,供大家參考,具體內(nèi)容如下

server端

import socketimport json,structfrom concurrent.futures import ThreadPoolExecutordebug = Trues = socket.socket()s.bind(('127.0.0.1',8848))s.listen()clients = {}pool = ThreadPoolExecutor(100)def send_msg(soc, msg): l = len(msg.encode('utf-8')) soc.send(struct.pack('q',l)) # 發(fā)數(shù)據(jù) soc.send(msg.encode('utf-8'))’’’用于監(jiān)聽已經(jīng)建立連接的客戶端發(fā)來的消息’’’def task(ip,c): while True:l = c.recv(8)ls = struct.unpack('q',l)[0]data = json.loads(c.recv(ls).decode('utf-8')) #接收到來自客戶端的消息。 eg: data = {’to_addr’:’msg’:’’}print(’來自%s的消息:%s’%(ip,data[’msg’]))# 客戶端發(fā)過來的數(shù)據(jù)# 數(shù)據(jù)有兩種情況 一種是發(fā)給所有人的 另一種單獨發(fā)給某一個人的if data.get(’to_addr’): #傳過來一個json格式的字典,如果這個to_addr不是空的話,就私發(fā)給目標(biāo)客戶 target_ip = data['to_addr']#從data字典里中獲取目標(biāo)ip target_conn = clients.get(target_ip) #獲取目標(biāo)客戶的conn鏈接 send_msg(target_conn,data[’msg’]) #發(fā)送訊息else: for ip,conn in clients.items():# if c != target_conn:send_msg(conn,data[’msg’])#data[’msg’]# # 從所有客戶端列表中找到這一個 發(fā)給它# to_addr = data['to_addr']# # print(data['to_addr'],'_______________')# soc = clients.get(to_addr)# send_msg(soc,data['msg'])# else:# # 遍歷所有客戶端 發(fā)給每一個人# for k,soc in clients.items():# # if soc != c:# send_msg(soc,data['msg'])while True: ’’’以下代碼用于檢測是否有客戶端連接’’’ c,add = s.accept() print('%s' % add[0],'連接到服務(wù)器!') clients[add[0]] = c # 把ip地址作為key,conn作為value存入clients字典中 ,clients = {’192.188.3.4’:conn鏈接} if debug:print(’clients=%s’%clients) ’’’以下代碼用于監(jiān)聽已經(jīng)建立連接的客戶端發(fā)來的消息’’’ pool.submit(task,add,c)

client端

import socket,json,structfrom threading import Threadc = socket.socket()c.connect(('127.0.0.1',8848))print('連接服務(wù)器成功!')def recver(): while True:lens_bytes = c.recv(8)lens = struct.unpack('q', lens_bytes)[0]recv_msg = c.recv(lens).decode('utf-8')print(recv_msg)# 開啟線程處理接收數(shù)據(jù)Thread(target=recver).start()while True: msg = input('>>>>:').strip() # 阻塞 if '@' in msg:info = {'msg':msg.split('@')[0],'to_addr':msg.split('@')[1]} else:info = {'msg': msg} data = json.dumps(info).encode('utf-8') c.send(struct.pack('q',len(data))) c.send(data)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 广西正涛环保工程有限公司【官网】 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 电伴热系统施工_仪表电伴热保温箱厂家_沃安电伴热管缆工业技术(济南)有限公司 | 大学食堂装修设计_公司餐厅效果图_工厂食堂改造_迈普装饰 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 安徽成考网-安徽成人高考网| 斗式提升机_链式斗提机_带式斗提机厂家无锡市鸿诚输送机械有限公司 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 手术示教系统-数字化手术室系统-林之硕医疗云智能视频平台 | 私人别墅家庭影院系统_家庭影院音响_家庭影院装修设计公司-邦牛影音 | 仪器仪表网 - 永久免费的b2b电子商务平台 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 美国HASKEL增压泵-伊莱科elettrotec流量开关-上海方未机械设备有限公司 | STRO|DTRO-STRO反渗透膜(科普)_碟滤| CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 一体化净水器_一体化净水设备_一体化水处理设备-江苏旭浩鑫环保科技有限公司 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 北京律师事务所_房屋拆迁律师_24小时免费法律咨询_云合专业律师网 | 400电话_400电话申请_888元包年_400电话办理服务中心_400VIP网 | 悬浮拼装地板_幼儿园_篮球场_悬浮拼接地板-山东悬浮拼装地板厂家 | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 818手游网_提供当下热门APP手游_最新手机游戏下载 | 东莞压铸厂_精密压铸_锌合金压铸_铝合金压铸_压铸件加工_东莞祥宇金属制品 | 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 东莞海恒试验仪器设备有限公司 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 充气膜专家-气膜馆-PTFE膜结构-ETFE膜结构-商业街膜结构-奥克金鼎 | 蒸汽吸附分析仪-进口水分活度仪|康宝百科| 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 | 伶俐嫂培训学校_月嫂培训班在哪里报名学费是多少_月嫂免费政府培训中心推荐 | 广西教师资格网-广西教师资格证考试网| 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 绿萝净除甲醛|深圳除甲醛公司|测甲醛怎么收费|培训机构|电影院|办公室|车内|室内除甲醛案例|原理|方法|价格立马咨询 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 振动传感器,检波器-威海广达勘探仪器有限公司 | 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 「钾冰晶石」氟铝酸钾_冰晶石_氟铝酸钠「价格用途」-亚铝氟化物厂家 |