成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python3使用TCP編寫一個簡易的文件下載器功能-創(chuàng)新互聯(lián)

利用Python3來實現(xiàn)TCP協(xié)議,和UDP類似。UDP應(yīng)用于及時通信,而TCP協(xié)議用來傳送文件、命令等操作,因為這些數(shù)據(jù)不允許丟失,否則會造成文件錯誤或命令混亂。下面代碼就是模擬客戶端通過命令行操作服務(wù)器??蛻舳溯斎朊?,服務(wù)器執(zhí)行并且返回結(jié)果。

邛崍網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護(hù)。成都創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

TCP(Transmission Control Protocol 傳輸控制協(xié)議):是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,由IETF的RFC 793定義。

使用TCP編寫一個簡易的文件下載器要求:需編寫文件下載器服務(wù)端和文件下載器客戶端

服務(wù)器端代碼:

import socket
import os
import threading
# 處理客戶端請求下載文件的操作(從主線程提出來的代碼)
def deal_client_request(ip_port, service_client_socket):
  # 連接成功后,輸出“客戶端連接成功”和客戶端的ip和端口
  print("客戶端連接成功", ip_port)
  # 接收客戶端的請求信息
  file_name = service_client_socket.recv(1024)
  # 解碼
  file_name_data = file_name.decode("utf-8")
  # 判斷文件是否存在
  if os.path.exists(file_name_data):
    #輸出文件字節(jié)數(shù)
    fsize = os.path.getsize(file_name_data)
    #轉(zhuǎn)化為兆單位
    fmb = fsize/float(1024*1024)
    #要傳輸?shù)奈募畔?    senddata = "文件名:%s 文件大?。?.2fMB"%(file_name_data,fmb)
    #發(fā)送和打印文件信息
    service_client_socket.send(senddata.encode("utf-8"))
    print("請求文件名:%s 文件大?。?.2f MB"%(file_name_data,fmb))
    #接受客戶是否需要下載
    options = service_client_socket.recv(1024)
    if options.decode("utf-8") == "y":
      # 打開文件
      with open(file_name_data, "rb") as f:
        # 計算總數(shù)據(jù)包數(shù)目
        nums = fsize/1024 
        # 當(dāng)前傳輸?shù)臄?shù)據(jù)包數(shù)目
        cnum = 0
        while True:
          file_data = f.read(1024)
          cnum = cnum + 1
          jindu = cnum/nums*100
          print("當(dāng)前已下載:%.2f%%"%jindu,end = "\r")
          if file_data:
            # 只要讀取到數(shù)據(jù),就向客戶端進(jìn)行發(fā)送
            service_client_socket.send(file_data)
          # 數(shù)據(jù)讀完,退出循環(huán)
          else:
            print("請求的文件數(shù)據(jù)發(fā)送完成")
            break
    else:
      print("下載取消!")
  else:
    print("下載的文件不存在!")
  # 關(guān)閉服務(wù)當(dāng)前客戶端的套接字
  service_client_socket.close()
if __name__ == '__main__':
  # 把工作目錄切換到data目錄下
  os.chdir("./data")
  # 創(chuàng)建套接字
  tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  # 綁定端口號
  tcp_server_socket.bind(("", 3356))
  # 設(shè)置監(jiān)聽,將主動套接字變?yōu)楸粍犹捉幼?  tcp_server_socket.listen(128)
  # 循環(huán)調(diào)用accept,可以支持多個客戶端同時連接,和多個客戶端同時下載文件
  while True:
    service_client_socket, ip_port = tcp_server_socket.accept()
    # 連接成功后打印套接字號
    #print(id(service_client_socket))
    # 創(chuàng)建子線程
    sub_thread = threading.Thread(target=deal_client_request, args=(ip_port, service_client_socket))
    # 啟動子線程
    sub_thread.start()

當(dāng)前名稱:Python3使用TCP編寫一個簡易的文件下載器功能-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://jinyejixie.com/article46/decihg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作網(wǎng)站維護(hù)、標(biāo)簽優(yōu)化手機網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、品牌網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
连州市| 岑巩县| 泸西县| 福贡县| 邹城市| 嘉黎县| 榆林市| 嘉义县| 博野县| 泊头市| 嘉黎县| 黄梅县| 扎兰屯市| 章丘市| 霍山县| 二连浩特市| 宜黄县| 扎兰屯市| 屏东县| 博兴县| 娄烦县| 罗田县| 阳泉市| 通山县| 会东县| 彩票| 固安县| 三明市| 上蔡县| 双柏县| 宁陕县| 包头市| 辽源市| 将乐县| 建昌县| 岳西县| 建平县| 高邑县| 松桃| 同心县| 五华县|