亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解如何用python實現一個簡單下載器的服務端和客戶端

發布時間:2020-09-03 10:05:16 來源:腳本之家 閱讀:151 作者:PXH樸信惠 欄目:開發技術

話不多說,先看代碼:

客戶端:

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()

服務器

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()

前幾天有寫一個基于UDP的簡單程序,今天學習了TCP,TCP與UDP 的區別與聯系其實已經寫得很清楚了,這里不再多說。今天使用的TCP,在文件下載方面應用更加廣泛(可靠)。客戶端分析:

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

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

服務器分析:

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

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

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

4.一個服務器可以被多個客戶端連接,每個客戶端都會被分配一個專員進行服務。

總結:

客戶端流程:創建套接字(可綁定)—連接服務器—收發—關閉
服務器流程:創建套接字—綁定—監聽連接—接收連接—收發—關閉

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

麦盖提县| 西昌市| 车致| 陇川县| 乾安县| 重庆市| 三河市| 利辛县| 闽清县| 上犹县| 寻乌县| 湖州市| 台北市| 宜宾市| 富裕县| 垣曲县| 元谋县| 闵行区| 丹阳市| 贵德县| 元氏县| 昆山市| 天长市| 罗田县| 茶陵县| 濮阳市| 商南县| 得荣县| 民权县| 南平市| 阿坝| 易门县| 东海县| 灵石县| 浪卡子县| 贵港市| 青浦区| 汉中市| 中牟县| 阿拉善盟| 锦屏县|