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

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

python實現(xiàn)同一局域網(wǎng)下傳輸圖片

瀏覽:21日期:2022-08-01 17:20:44

簡述

Python可以通過網(wǎng)絡(luò)套接字來進行傳輸圖片 這點還是比較有意思的。

下面用TCP來進行實現(xiàn),適用于Python3

代碼功能簡述

下面代碼

實現(xiàn)了在一個電腦上發(fā)送圖片(Sender) 實現(xiàn)了在另外一個電腦(也可以是同一個電腦上的不同端口)接受圖片(Reciever) 只發(fā)一次,然后只收一次 新圖片會在舊圖片上多一個 “new_”前綴 必須要先開接受者代碼才行,之后再啟動發(fā)送者代碼(不然發(fā)送者代碼會直接被拒絕) 下面是固定了在一個電腦上(看ip地址,下面寫的是127.0.0.1,如果是其他電腦就寫其他電腦上的ip地址) 另外本程序只能在同一個局域網(wǎng)下使用(就算是廣域網(wǎng)上,那就必須要使用廣域網(wǎng)的ip地址)

代碼

【后附解析】

Sender.py (發(fā)送者)

import socketimport osimport sysimport structdef sock_client(): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((’127.0.0.1’, 6666)) except socket.error as msg: print(msg) print(sys.exit(1)) while True: filepath = input(’input the file: ’) # filepath = ’test.png’ fhead = struct.pack(b’128sl’, bytes(os.path.basename(filepath), encoding=’utf-8’), os.stat(filepath).st_size) s.send(fhead) print(’client filepath: {0}’.format(filepath)) fp = open(filepath, ’rb’) while 1: data = fp.read(1024) if not data:print(’{0} file send over...’.format(filepath))break s.send(data) s.close() breakif __name__ == ’__main__’: sock_client()

Reciever.py (接受者)

import socketimport osimport sysimport structdef socket_service(): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((’127.0.0.1’, 6666)) s.listen(10) except socket.error as msg: print(msg) sys.exit(1) print('Wait') while True: sock, addr = s.accept() deal_data(sock, addr) break s.close()def deal_data(sock, addr): print('Accept connection from {0}'.format(addr)) while True: fileinfo_size = struct.calcsize(’128sl’) buf = sock.recv(fileinfo_size) if buf: filename, filesize = struct.unpack(’128sl’, buf) fn = filename.decode().strip(’x00’) new_filename = os.path.join(’./’, ’new_’ + fn) recvd_size = 0 fp = open(new_filename, ’wb’) while not recvd_size == filesize:if filesize - recvd_size > 1024: data = sock.recv(1024) recvd_size += len(data)else: data = sock.recv(1024) recvd_size = filesizefp.write(data) fp.close() sock.close() breakif __name__ == ’__main__’: socket_service()

解析:

發(fā)送者代碼:

還是先創(chuàng)建TCP套接字,并發(fā)起連接:

具體代碼如下:

try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((’127.0.0.1’, 6666)) except socket.error as msg: print(msg) print(sys.exit(1))

接下來的While循環(huán)中,就開始進行圖片發(fā)送

通過struct庫進行打包,然后再用套接字來發(fā)送 注意:網(wǎng)絡(luò)上的有些代碼是不能直接用的,比如在這里,就需要把str變成bytes 通過os庫來獲取文件的基本名(這個是為了避免有些文件中包含具體路徑) 通過os庫來獲取文件的大小(通過文件狀態(tài)中關(guān)于大小的描述中獲取到)

fhead = struct.pack(b’128sl’, bytes(os.path.basename(filepath), encoding=’utf-8’), os.stat(filepath).st_size)s.send(fhead)

之后再通過二進制方式來獲取文件。 然后再發(fā)送出去,每次發(fā)送固定長度的數(shù)據(jù)。先讀,再判斷是否為空,再發(fā)送。

接受端:

還是一樣,先創(chuàng)建套接字(不過這個需要綁定對應(yīng)的ip以及端口) 具體代碼如下:(這里寫的是監(jiān)聽10個套接字對象,但是在我們代碼中并沒喲用到)

try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((’127.0.0.1’, 6666)) s.listen(10) except socket.error as msg: print(msg) sys.exit(1)

之后就進入到循環(huán),來判斷,是否獲取到sock對象,這里是會進入阻塞狀態(tài)的。

deal_data中就開始通過連接的對象來獲取數(shù)據(jù)。

一樣,還是一個無限循環(huán),但其實本質(zhì)上還是空的。。。沒什么特別的。

之后就是對于傳過來的文件名處理一下,這里的這些“128sl”,其實就是一個大小規(guī)模(類似于打包的箱子大小的樣子)。然后就是得到新的文件名了。 對應(yīng)的代碼如下:

filename, filesize = struct.unpack(’128sl’, buf)fn = filename.decode().strip(’x00’)new_filename = os.path.join(’./’, ’new_’ + fn)

之后的recvd_size,其實就是為了來計數(shù)的標(biāo)簽 之后就不斷地收,邊收邊寫入文件,一直到收完了之后。就關(guān)閉掉對應(yīng)的文件流 最后關(guān)閉套接字,退出循環(huán)

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

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: UV固化机_UVLED光固化机_UV干燥机生产厂家-上海冠顶公司专业生产UV固化机设备 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 打孔器,打孔钳厂家【温州新星德牌五金工具】 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 回转支承-转盘轴承-回转驱动生产厂家-洛阳隆达轴承有限公司 | 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 锡膏喷印机-全自动涂覆机厂家-全自动点胶机-视觉点胶机-深圳市博明智控科技有限公司 | 刮板输送机,粉尘加湿搅拌机,螺旋输送机,布袋除尘器 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | cnc精密加工_数控机械加工_非标平键定制生产厂家_扬州沃佳机械有限公司 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 干培两用箱-细菌恒温培养箱-菲斯福仪器| 比亚迪叉车-比亚迪电动叉车堆垛车托盘车仓储叉车价格多少钱报价 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 选宝石船-陆地水上开采「精选」色选机械设备-青州冠诚重工机械有限公司 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 南汇8424西瓜_南汇玉菇甜瓜-南汇水蜜桃价格 | 液压中心架,数控中心架,自定心中心架-烟台恒阳机电设计有限公司 行星搅拌机,双行星搅拌机,动力混合机,无锡米克斯行星搅拌机生产厂家 | 紫外可见光分光度计-紫外分光度计-分光光度仪-屹谱仪器制造(上海)有限公司 | 耐磨陶瓷,耐磨陶瓷管道_厂家-淄博拓创陶瓷科技 | 螺杆真空泵_耐腐蚀螺杆真空泵_水环真空泵_真空机组_烟台真空泵-烟台斯凯威真空 | 万家财经_财经新闻_在线财经资讯网| 纸塑分离机-纸塑分离清洗机设备-压力筛-碎浆机厂家金双联环保 | 高压管道冲洗清洗机_液压剪叉式升降机平台厂家-林君机电 | 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 天命文免费算命堂_自助算命_自由算命系统_长文周易 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 东莞海恒试验仪器设备有限公司 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 自动钻孔机-全自动数控钻孔机生产厂家-多米(广东)智能装备有限公司 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | LED投光灯-工矿灯-led路灯头-工业灯具 - 山东普瑞斯照明科技有限公司 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 药品冷藏箱厂家_低温冰箱_洁净工作台-济南欧莱博电子商务有限公司官网 | 棕刚玉_白刚玉_铝酸钙-锐石新材料 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 |