最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何用python實(shí)現(xiàn)一個(gè)簡單下載器的服務(wù)端和客戶端

 更新時(shí)間:2019年10月28日 10:52:40   作者:PXH樸信惠  
這篇文章主要介紹了詳解如何用python實(shí)現(xiàn)一個(gè)簡單下載器的服務(wù)端和客戶端,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

話不多說,先看代碼:

客戶端:

import socket
def main():
  #creat:
  download_client=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  #link:
  serv_ip=input("please input server IP")
  serv_port=int(input(("please input server port")))
  serv_addr=(serv_ip,serv_port)
  download_client.connect(serv_addr)
  #send and receive
  filename=input("please input filename")
  download_client.send(filename.encode("utf-8"))
  download_data=download_client.recv(1024)
  if download_data:
    with open("receive_"+filename,"wb") as f:
      f.write(download_data)
  download_client.close()
if __name__ == '__main__':
  main()

服務(wù)器:

import socket
def send_data(server_socket):
  while True:
    filename = server_socket.recv(1024).decode("utf-8")
    print("用戶請求下載對象是%s"%filename)
    if filename:
      with open(filename, "rb") as f:
        file_data = f.read()
        server_socket.send(file_data)
    else:
      server_socket.close()
      break
def main():
  #creat
  server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  #bind
  server.bind(("",4399))
  #listen
  server.listen(128)
  #accept
  while True:
    print("waiting for quest")
    server_socket,client_ip=server.accept()
    print("connected")
    send_data(server_socket)
  #close
  server.close()
if __name__ == '__main__':
  main()

前幾天有寫一個(gè)基于UDP的簡單程序,今天學(xué)習(xí)了TCP,TCP與UDP 的區(qū)別與聯(lián)系其實(shí)已經(jīng)寫得很清楚了,這里不再多說。今天使用的TCP,在文件下載方面應(yīng)用更加廣泛(可靠)??蛻舳朔治觯?br />

1.注意到TCP協(xié)議是面向連接的,也就是每一個(gè)TCP,從客戶端發(fā)送請求,需要與服務(wù)器建立一個(gè)連接(UDP不用)。所以這一點(diǎn)體現(xiàn)在程序中就有了一個(gè)connect動作

2.目前程序recv方法僅支持1kb,收發(fā)大文件會出錯(cuò),這點(diǎn)在我之后搞清楚大文件下載再說

服務(wù)器分析:

1.服務(wù)器是需要綁定的,也就是需要把他的地址定下來,這樣客戶端才會知道每次要和誰建立鏈接。

2.socket之listen,之前的網(wǎng)絡(luò)鏈接我們都是主動的去連接別人,如connect(),服務(wù)器是不需要連接別人的,所以他是一個(gè)被動連接,等著別人來連接他。listen就是拿來轉(zhuǎn)換的。后面的參數(shù)是參數(shù)指定隊(duì)列中最多可容納的等待接受的傳入連接數(shù)。若要確定可指定的最大連接數(shù),要參照 MaxConnections 值。也就是等著連接的最大數(shù)。

3.accept()返回參數(shù)是一個(gè)元組,前面我們就用兩個(gè)變量對他進(jìn)行拆包了,第一個(gè)是一個(gè)socket對象,第二個(gè)是連接本服務(wù)器的地址。對于這個(gè)新的socket對象可以理解為服務(wù)器主socket接到連接后派遣了一個(gè)專員socket來對這個(gè)客戶端進(jìn)行服務(wù)。

4.一個(gè)服務(wù)器可以被多個(gè)客戶端連接,每個(gè)客戶端都會被分配一個(gè)專員進(jìn)行服務(wù)。

總結(jié):

客戶端流程:創(chuàng)建套接字(可綁定)—連接服務(wù)器—收發(fā)—關(guān)閉
服務(wù)器流程:創(chuàng)建套接字—綁定—監(jiān)聽連接—接收連接—收發(fā)—關(guān)閉

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

相關(guān)文章

  • 基于Python實(shí)現(xiàn)圖像文字識別OCR工具

    基于Python實(shí)現(xiàn)圖像文字識別OCR工具

    在工作、生活中常常會用到,比如票據(jù)、漫畫、掃描件、照片的文本提取。本文主要介紹了基于PyQt + PaddleOCR實(shí)現(xiàn)的一個(gè)桌面端的OCR工具,用于快速實(shí)現(xiàn)圖片中文本區(qū)域自動檢測+文本自動識別,需要的朋友可以參考一下
    2021-12-12
  • Python中psutil的介紹與用法

    Python中psutil的介紹與用法

    這篇文章主要給大家介紹了關(guān)于Python中psutil的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python樹的重建實(shí)現(xiàn)示例

    Python樹的重建實(shí)現(xiàn)示例

    樹的重建是一種從給定的遍歷序列中恢復(fù)原樹結(jié)構(gòu)的算法,本文就來介紹一下Python樹的重建實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • 通用的Django注冊功能模塊實(shí)現(xiàn)方法

    通用的Django注冊功能模塊實(shí)現(xiàn)方法

    這篇文章主要介紹了通用的Django注冊功能模塊實(shí)現(xiàn)步驟,幫助大家更好的理解和使用django,感興趣的朋友可以了解下
    2021-02-02
  • OpenCV實(shí)現(xiàn)車輛識別和運(yùn)動目標(biāo)檢測

    OpenCV實(shí)現(xiàn)車輛識別和運(yùn)動目標(biāo)檢測

    本文主要介紹了OpenCV實(shí)現(xiàn)車輛識別和運(yùn)動目標(biāo)檢測,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Python 計(jì)算任意兩向量之間的夾角方法

    Python 計(jì)算任意兩向量之間的夾角方法

    今天小編就為大家分享一篇Python 計(jì)算任意兩向量之間的夾角方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 安裝完P(guān)ython包然后找不到模塊的解決步驟

    安裝完P(guān)ython包然后找不到模塊的解決步驟

    今天小編就為大家分享一篇安裝完P(guān)ython包然后找不到模塊的解決步驟,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 總結(jié)python多進(jìn)程multiprocessing的相關(guān)知識

    總結(jié)python多進(jìn)程multiprocessing的相關(guān)知識

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著python multiprocessing多進(jìn)程的相關(guān)知識展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python爬蟲實(shí)戰(zhàn)項(xiàng)目掌握酷狗音樂的加密過程

    Python爬蟲實(shí)戰(zhàn)項(xiàng)目掌握酷狗音樂的加密過程

    在常見的幾個(gè)音樂網(wǎng)站里,酷狗可以說是最好爬取的啦,什么彎都沒有,所以最適合小白入門爬蟲,本篇針對爬蟲零基礎(chǔ)的小白,所以每一步驟我都截圖并詳細(xì)解釋了,其實(shí)我自己看著都啰嗦,歸根到底就是兩個(gè)步驟的請求,還請大佬繞路勿噴
    2021-09-09
  • 深入解析Python中的__builtins__內(nèi)建對象

    深入解析Python中的__builtins__內(nèi)建對象

    __builtins__ 是內(nèi)建模塊__builtin__中的對象,使用Python中的內(nèi)建函數(shù)時(shí)會通過__builtins__引導(dǎo),這里我們就來深入解析Python中的__builtins__內(nèi)建對象,需要的朋友可以參考下
    2016-06-06

最新評論

临江市| 洛隆县| 抚顺县| 孝感市| 厦门市| 个旧市| 衡南县| 天镇县| 阜康市| 巴里| 家居| 太仓市| 景宁| 黄骅市| 铜山县| 博野县| 揭阳市| 屯昌县| 茶陵县| 邹平县| 顺昌县| 仲巴县| 桦川县| 奇台县| 宁陕县| 略阳县| 随州市| 赣州市| 中宁县| 团风县| 达孜县| 密山市| 昆明市| 台中县| 公安县| 鄂温| 马山县| 顺义区| 肇州县| 连南| 泰安市|