91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構

      手機站
      千鋒教育

      千鋒學習站 | 隨時隨地免費學

      千鋒教育

      掃一掃進入千鋒手機站

      領取全套視頻
      千鋒教育

      關注千鋒學習站小程序
      隨時隨地免費學習課程

      當前位置:首頁  >  技術干貨  > Python網(wǎng)絡編程調(diào)用接收數(shù)據(jù)的三種方法

      Python網(wǎng)絡編程調(diào)用接收數(shù)據(jù)的三種方法

      來源:千鋒教育
      發(fā)布人:xqq
      時間: 2023-11-07 01:44:43 1699292683

      最近在使用python進行網(wǎng)絡編程開發(fā)一個通用的tcpclient測試小工具。在使用socket進行網(wǎng)絡編程中,如何判定對端發(fā)送一條報文是否接收完成,是進行socket網(wǎng)絡開發(fā)必須要考慮的一個問題。這里,簡要介紹一下判別數(shù)據(jù)接收接收完成常用的三種方法:

      1.基礎數(shù)據(jù)接收法:

      使用基礎數(shù)據(jù)接收法時,當與服務socket斷開連接時,會接收到空字符串。因此,可以根據(jù)此特點,在程序中加入循環(huán),一直接收數(shù)據(jù),直到數(shù)據(jù)發(fā)送端關閉socket連接。適用場景:客戶端和服務器的鏈接為短鏈接(即一次socket通訊后連接就會關閉)。代碼如下:

      importsocket,struct,sys,time

      Port=22220

      #assumeasocketdisconnect(datareturnedisemptystring)meansalldatawas#donebeingsent.

      defrecv_basic(the_socket):

      total_data=[]

      whileTrue:

      data=the_socket.recv(20480)

      ifnotdata:break

      total_data.append(data)

      return''.join(total_data)

      2.尾標識方法

      通過尋找接收的協(xié)議數(shù)據(jù)中的尾標識字符串,獲取完整的數(shù)據(jù)的數(shù)據(jù)報文。適用場景:接收的協(xié)議數(shù)據(jù)中包含相關的尾標識。代碼如下:

      End='somethinguseableasanendmarker'

      defrecv_end(the_socket):

      total_data=[];data=''

      whileTrue:

      data=the_socket.recv(8192)

      ifEndindata:

      total_data.append(data[:data.find(End)])

      break

      total_data.append(data)

      iflen(total_data)>1:

      #checkifend_of_datawassplit

      last_pair=total_data[-2]+total_data[-1]

      ifEndinlast_pair:

      total_data[-2]=last_pair[:last_pair.find(End)]

      total_data.pop()

      break

      return''.join(total_data)

      3.負載長度方法

      即通過協(xié)議數(shù)據(jù)中的負載長度值,確定有效報文的長度,適用場景:協(xié)議數(shù)據(jù)中包含負載協(xié)議字段。這種方法也是比較常用和通用的一種方法,但是需要一邊接收數(shù)據(jù)一邊解析數(shù)據(jù)。代碼如下:

      defrecv_size(the_socket):

      #datalengthispackedinto4bytes

      total_len=0;total_data=[];size=sys.maxint

      size_data=sock_data='';recv_size=8192

      whiletotal_len

      sock_data=the_socket.recv(recv_size)

      ifnottotal_data:

      iflen(sock_data)>4:

      size_data+=sock_data

      size=struct.unpack('>i',size_data[:4])[0]

      recv_size=size

      ifrecv_size>524288:recv_size=524288

      total_data.append(size_data[4:])

      else:

      size_data+=sock_data

      else:

      total_data.append(sock_data)

      total_len=sum([len(i)foriintotal_data])

      return''.join(total_data)

      以上內(nèi)容為大家介紹了Python網(wǎng)絡編程調(diào)用接收數(shù)據(jù)的三種方法,希望對大家有所幫助,如果想要了解更多Python相關知識,請關注IT培訓機構:千鋒教育。http://www.jsszjs.cn/

      tags: python培訓
      聲明:本站稿件版權均屬千鋒教育所有,未經(jīng)許可不得擅自轉載。
      10年以上業(yè)內(nèi)強師集結,手把手帶你蛻變精英
      請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
      免費領取
      今日已有369人領取成功
      劉同學 138****2860 剛剛成功領取
      王同學 131****2015 剛剛成功領取
      張同學 133****4652 剛剛成功領取
      李同學 135****8607 剛剛成功領取
      楊同學 132****5667 剛剛成功領取
      岳同學 134****6652 剛剛成功領取
      梁同學 157****2950 剛剛成功領取
      劉同學 189****1015 剛剛成功領取
      張同學 155****4678 剛剛成功領取
      鄒同學 139****2907 剛剛成功領取
      董同學 138****2867 剛剛成功領取
      周同學 136****3602 剛剛成功領取
      相關推薦HOT