欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python網(wǎng)絡(luò)編程調(diào)用recv函數(shù)完整接收數(shù)據(jù)的三種方法

 更新時(shí)間:2017年03月31日 09:54:58   作者:南宮軒諾  
本文主要介紹了python網(wǎng)絡(luò)編程調(diào)用recv函數(shù)完整接收數(shù)據(jù)的三種方法。具有很好的參考價(jià)值,下面跟著小編一起來看下吧

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

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

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

import socket,struct,sys,time
Port=22220
#assume a socket disconnect (data returned is empty string) means all data was #done being sent.
def recv_basic(the_socket):
 total_data=[]
 while True:
  data = the_socket.recv(20480) 
  if not data: break
  total_data.append(data)
 return ''.join(total_data)

2.尾標(biāo)識(shí)方法

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

End='something useable as an end marker'
def recv_end(the_socket):
 total_data=[];data=''
 while True:
   data=the_socket.recv(8192)
   if End in data:
    total_data.append(data[:data.find(End)])
    break
   total_data.append(data)
   if len(total_data)>1:
    #check if end_of_data was split
    last_pair=total_data[-2]+total_data[-1]
    if End in last_pair:
     total_data[-2]=last_pair[:last_pair.find(End)]
     total_data.pop()
     break
 return ''.join(total_data)

3.負(fù)載長度方法

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

def recv_size(the_socket):
 #data length is packed into 4 bytes
 total_len=0;total_data=[];size=sys.maxint
 size_data=sock_data='';recv_size=8192
 while total_len<size:
  sock_data=the_socket.recv(recv_size)
  if not total_data:
   if len(sock_data)>4:
    size_data+=sock_data
    size=struct.unpack('>i', size_data[:4])[0]
    recv_size=size
    if recv_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) for i in total_data ])
 return ''.join(total_data)

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • django+echart數(shù)據(jù)動(dòng)態(tài)顯示的例子

    django+echart數(shù)據(jù)動(dòng)態(tài)顯示的例子

    今天小編就為大家分享一篇django+echart數(shù)據(jù)動(dòng)態(tài)顯示的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 講解Python中運(yùn)算符使用時(shí)的優(yōu)先級(jí)

    講解Python中運(yùn)算符使用時(shí)的優(yōu)先級(jí)

    這篇文章主要介紹了講解Python中運(yùn)算符使用時(shí)的優(yōu)先級(jí),是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • python動(dòng)態(tài)參數(shù)用法實(shí)例分析

    python動(dòng)態(tài)參數(shù)用法實(shí)例分析

    這篇文章主要介紹了python動(dòng)態(tài)參數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了Python中動(dòng)態(tài)參數(shù)的功能及使用技巧,需要的朋友可以參考下
    2015-05-05
  • Python操作PDF實(shí)現(xiàn)制作數(shù)據(jù)報(bào)告

    Python操作PDF實(shí)現(xiàn)制作數(shù)據(jù)報(bào)告

    Python操作PDF的庫有很多,比如PyPDF2、pdfplumber、PyMuPDF等等。本文將利用FPDF模塊操作PDF實(shí)現(xiàn)制作數(shù)據(jù)報(bào)告,感興趣的小伙伴可以嘗試一下
    2022-12-12
  • Python裝飾器知識(shí)點(diǎn)補(bǔ)充

    Python裝飾器知識(shí)點(diǎn)補(bǔ)充

    本篇文章給大家補(bǔ)充了關(guān)于Python裝飾器的相關(guān)知識(shí)點(diǎn)內(nèi)容,大家可以跟著學(xué)習(xí)參考下。
    2018-05-05
  • Python基于TCP實(shí)現(xiàn)會(huì)聊天的小機(jī)器人功能示例

    Python基于TCP實(shí)現(xiàn)會(huì)聊天的小機(jī)器人功能示例

    這篇文章主要介紹了Python基于TCP實(shí)現(xiàn)會(huì)聊天的小機(jī)器人功能,結(jié)合實(shí)例形式分析了Python通過socket模塊實(shí)現(xiàn)TCP連接的客戶端與服務(wù)器端模擬聊天機(jī)器人功能相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • Python創(chuàng)建exe運(yùn)行器和截圖工具的示例詳解

    Python創(chuàng)建exe運(yùn)行器和截圖工具的示例詳解

    本文我們將探討如何使用Python和wxPython創(chuàng)建一個(gè)強(qiáng)大而實(shí)用的桌面應(yīng)用程序,可以遍歷指定文件夾中的所有EXE文件,感興趣的小伙伴可以了解一下
    2024-10-10
  • Python動(dòng)態(tài)可視化模塊Pynimate初體驗(yàn)

    Python動(dòng)態(tài)可視化模塊Pynimate初體驗(yàn)

    Pynimate是python第三方用于動(dòng)態(tài)可視化的數(shù)據(jù)模塊,是一位專攻?Python?語言的程序員開發(fā)的安裝包。本文將通過幾個(gè)簡單的示例,講解一下Pynimate的使用方法,需要的可以參考一下
    2023-02-02
  • Python中字符串操作技巧

    Python中字符串操作技巧

    在編程中,字符串操作是一項(xiàng)基本技能,常見的操作包括大小寫轉(zhuǎn)換、字符串替換、倒序、統(tǒng)計(jì)、切片、切割、清理和對(duì)齊等,查找方法如find()、rfind()、index()和rindex()用于定位子串,字符串可以通過"+"號(hào)或join()方法拼接,去重技巧等,都是常見的字符串處理需求
    2024-10-10
  • python中sklearn的pipeline模塊實(shí)例詳解

    python中sklearn的pipeline模塊實(shí)例詳解

    這篇文章主要介紹了python中sklearn的pipeline模塊的相關(guān)知識(shí),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論