国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁/技術文章
文章詳情頁

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

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

簡述

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

下面用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)絡上的有些代碼是不能直接用的,比如在這里,就需要把str變成bytes 通過os庫來獲取文件的基本名(這個是為了避免有些文件中包含具體路徑) 通過os庫來獲取文件的大?。ㄍㄟ^文件狀態(tài)中關于大小的描述中獲取到)

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)建套接字(不過這個需要綁定對應的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),但其實本質上還是空的。。。沒什么特別的。

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

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

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

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

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 成年大片免费视频播放手机不卡 | 欧美日韩看看2015永久免费 | 亚洲天堂在线视频观看 | 精品综合久久久久久88小说 | 欧美精品综合一区二区三区 | 久草网站在线观看 | 国产男女 爽爽爽爽视频 | 亚洲精品国产一区二区在线 | 欧洲做人爱c欧美 | 久热久草| 成人禁在线观看网站 | 国产精品毛片在线大全 | 国产在线精品一区免费香蕉 | 国产99高清一区二区 | 不卡一区二区在线 | 韩国精品一区视频在线播放 | 香港av三级 | 亚洲国产系列 | 欧美片网站免费 | 女仆色在线 | 精品久久久久久中文字幕网 | 久久精品国产亚洲 | 亚洲国产成人久久三区 | 欧美久久久久久 | 中文成人在线 | 97在线免费视频观看 | 国产精品日本欧美一区二区 | 成人国产视频在线观看 | 久久精品视频99精品视频150 | 亚洲美女综合网 | 国产在线拍揄自揄视精品不卡 | 99国产精品九九视频免费看 | 久久―日本道色综合久久 | 日韩精品特黄毛片免费看 | 欧美精品在线视频观看 | 亚洲精品一区二区在线播放 | 69精品免费视频 | 亚欧成人毛片一区二区三区四区 | 99国产精品欧美久久久久久影院 | 欧美中文字幕在线看 | 美国a毛片 |