python使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸
本文為大家分享了python使用tcp實(shí)現(xiàn)局域網(wǎng)內(nèi)文件傳輸?shù)木唧w代碼,供大家參考,具體內(nèi)容如下
功能:
可以利用python創(chuàng)建的TCP客戶端從我們自己搭建的TCP服務(wù)器上下載文件。
實(shí)現(xiàn)需求:
安裝socket模塊
簡(jiǎn)單了解sokcet模塊用法
服務(wù)器代碼如下:
import socket def file_deal(file_name): # 定義函數(shù)用于處理用戶索要下載的文件 try: # 二進(jìn)制方式讀取 files = open(file_name, "rb") mes = files.read() except: print("沒有該文件") else: files.close() return mes def main(): # 創(chuàng)建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 固定端口號(hào) tcp_socket.bind(("",8888)) # 將主動(dòng)套接字轉(zhuǎn)為被動(dòng)套接字 tcp_socket.listen(128) while True: # 利用accept獲取分套接字以及客戶端的地址 client_socket,client_addr = tcp_socket.accept() # 接收客戶端的數(shù)據(jù) file_name = client_socket.recv(4096) # 調(diào)用函數(shù)處理用戶下載的文件 mes = file_deal(file_name) if mes: # 如果文件不為空發(fā)送 client_socket.send(mes) #關(guān)閉分套接字 client_socket.close() if __name__ == "__main__": main() import socket def file_deal(file_name): # 定義函數(shù)用于處理用戶索要下載的文件 try: # 二進(jìn)制方式讀取 files = open(file_name, "rb") mes = files.read() except: print("沒有該文件") else: files.close() return mes def main(): # 創(chuàng)建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 固定端口號(hào) tcp_socket.bind(("",8888)) # 將主動(dòng)套接字轉(zhuǎn)為被動(dòng)套接字 tcp_socket.listen(128) while True: # 利用accept獲取分套接字以及客戶端的地址 client_socket,client_addr = tcp_socket.accept() # 接收客戶端的數(shù)據(jù) file_name = client_socket.recv(4096) # 調(diào)用函數(shù)處理用戶下載的文件 mes = file_deal(file_name) if mes: # 如果文件不為空發(fā)送 client_socket.send(mes) #關(guān)閉分套接字 client_socket.close() if __name__ == "__main__": main()
客戶端代碼:
from socket import * import os def main(): # 建立套接字 tcp_socket = socket(AF_INET, SOCK_STREAM) # 接收用輸入的服務(wù)器端的ip和端口 tcp_ip = input("請(qǐng)輸入ip:") tcp_port = int(input("請(qǐng)輸入端口:")) # 連接服務(wù)器 tcp_socket.connect((tcp_ip, tcp_port)) # 輸入要下載的文件名 file_name = input("請(qǐng)輸入要下載的文件名:") # 將文件名發(fā)送至服務(wù)器端 tcp_socket.send(file_name.encode()) # 創(chuàng)建一個(gè)空文件 new_file = open(file_name, "wb") # 用與計(jì)算讀取的字節(jié)數(shù) time = 0 while True: # 接收服務(wù)器端返回的內(nèi)容 mes = tcp_socket.recv(4096) # 如果內(nèi)容不為空?qǐng)?zhí)行 if mes: # 解碼并向文件內(nèi)寫入 new_file.write(mes.decode()) # 計(jì)算字節(jié) time += len(mes) else: # 如果字節(jié)數(shù)為空即未收到內(nèi)容 if time == 0: # 關(guān)閉文件 new_file.close() # 刪除剛剛創(chuàng)建的文件 os.remove(file_name) print("沒有您要下載的文件") else: # 如過time有值時(shí)name文件傳輸完成 print("文件下載成功") break # 關(guān)閉套接字 tcp_socket.close() if __name__ == '__main__': main()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python實(shí)現(xiàn)基于HTTP文件傳輸實(shí)例
- Python實(shí)現(xiàn)的簡(jiǎn)單文件傳輸服務(wù)器和客戶端
- python實(shí)現(xiàn)的一個(gè)p2p文件傳輸實(shí)例
- python3.5基于TCP實(shí)現(xiàn)文件傳輸
- python cs架構(gòu)實(shí)現(xiàn)簡(jiǎn)單文件傳輸
- python 使用poster模塊進(jìn)行http方式的文件傳輸?shù)椒?wù)器的方法
- 樹莓派采用socket方式文件傳輸(python)
- python基于xmlrpc實(shí)現(xiàn)二進(jìn)制文件傳輸?shù)姆椒?/a>
- python實(shí)現(xiàn)FTP文件傳輸?shù)姆椒ǎǚ?wù)器端和客戶端)
- python利用socket實(shí)現(xiàn)udp文件傳輸功能
相關(guān)文章
用 Python 元類的特性實(shí)現(xiàn) ORM 框架
利用 Python 元類的特性實(shí)現(xiàn) ORM 框架的 insert 功能,通過操作類對(duì)象,對(duì)數(shù)據(jù)表進(jìn)行數(shù)據(jù)增加操作。由于 ORM 比較復(fù)雜,也不要重復(fù)造輪子,就完成一個(gè) insert 相類似的ORM,理解其中的道理即可。2021-05-05使用Python串口實(shí)時(shí)顯示數(shù)據(jù)并繪圖的例子
今天小編就為大家分享一篇使用Python串口實(shí)時(shí)顯示數(shù)據(jù)并繪圖的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12Python利用Gradio與EasyOCR構(gòu)建在線識(shí)別文本的Web應(yīng)用
隨著人工智能的不斷發(fā)展,各種智能算法越來越普遍,本文就給大家介紹一種通過訓(xùn)練好的算法進(jìn)行文字識(shí)別的方法,而且是Web頁(yè)面可視化操作,方便調(diào)用,希望大家喜歡2023-04-04Python實(shí)現(xiàn)計(jì)算字符串中出現(xiàn)次數(shù)最多的字符示例
這篇文章主要介紹了Python實(shí)現(xiàn)計(jì)算字符串中出現(xiàn)次數(shù)最多的字符,涉及Python針對(duì)字符串的遍歷、統(tǒng)計(jì)等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01Python編程pytorch深度卷積神經(jīng)網(wǎng)絡(luò)AlexNet詳解
AlexNet和LeNet的架構(gòu)非常相似。這里我們提供了一個(gè)稍微精簡(jiǎn)版本的AlexNet,去除了當(dāng)年需要兩個(gè)小型GPU同時(shí)運(yùn)算的設(shè)計(jì)特點(diǎn)2021-10-10python實(shí)現(xiàn)微信自動(dòng)回復(fù)機(jī)器人功能
wxpy基于itchat,使用了 Web 微信的通訊協(xié)議,通過大量接口優(yōu)化提升了模塊的易用性,并進(jìn)行豐富的功能擴(kuò)展。這篇文章主要介紹了python實(shí)現(xiàn)微信自動(dòng)回復(fù)機(jī)器人功能,需要的朋友可以參考下2019-07-07