婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python 網絡編程要點總結

python 網絡編程要點總結

熱門標簽:北京電信外呼系統靠譜嗎 大連crm外呼系統 洪澤縣地圖標注 老人電話機器人 高德地圖標注是免費的嗎 地圖標注視頻廣告 梅州外呼業務系統 無錫客服外呼系統一般多少錢 百度地圖標注位置怎么修改

1,七層網絡協議

應表會傳網數物:

應用層、表示層、會話層: (這三層又可以合并為應用層,這樣就是五層網絡協議【osi五層協議】) python '你好'.encoding('utf-8')

傳輸層: 預備如何傳輸、使用的端口 (port,tcp,udp); 四層路由器、四層交換機

網絡層: ip(ipv4 ipv6); 路由器、三層交換機

數據鏈路層: mac(mac, arp協議:可以通過ip找到mac); 二層交換機、網卡(單播、廣播、組播,arp用到單播和廣播)

物理層 : 轉成電信號

2,TCP/UDP

tcp需要先建立連接,然后才能夠通信(類似于打電話)

  • 占用連接,可靠(消息不會丟失),實時性高,慢(效率低、面向連接、可靠、全雙工)
  • 三次握手
    • 客戶端向服務器端發送syn請求
    • 服務端回復ack并發送syn請求
    • 客戶端接收到請求后再回復ack,連接建立
      • 在socket中是由 客戶端connect() 和 服務端accept()兩個命令完成的
  • 四次揮手
    • 客戶端向服務端發送fin請求
    • 服務端回復ack確認
    • 服務端向客戶端發送fin請求
    • 客戶端回復ack確認
      • 在socket中是由 客戶端sk.close() 和 服務端 conn.close()兩個命令完成的
      • 揮手時服務端的ack和fin不能同時發送,因為客戶端發送完所有信息時,服務端不一定完成了所有信息的發送

udp不需要建立連接,就可以通信(類似于發信息)

不占用連接,不夠可靠(消息因為網絡不穩定可能丟失),實時性不高(效率高、無連接的、不可靠的)

3,例子

'''
------------------------------
TCP協議
------------------------------
'''
'''server'''
import socket

sk = socket.socket()
sk.bind(('127.0.0.1', 6000))
sk.listen()

conn, addr = sk.accept()
conn.send('你好'.encode('utf-8'))
msg = conn.recv(1024)
print(msg.decode('utf-8'))
conn.close()

sk.close()

'''client'''
import socket

sk = socket.socket()
sk.connect(('127.0.0.1', 6000))

msg = sk.recv(1024)
print(msg.decode('utf-8'))
sk.send('再見'.encode('utf-8'))

sk.close()

'''
------------------------------
UDP協議
------------------------------
'''
'''server'''
import socket

sk = socket.socket(type=socket.SOCK_DGRAM)   #SOCK_DGRAM udp    default tcp
sk.bind(('127.0.0.1', 6000))

# msg = sk.recv(1024)
# print(msg.decode('utf-8'))

while True:
    msg = sk.recvfrom(1024)
    print(msg)
    print(msg[0].decode('utf-8'))
    if msg[0].decode('utf-8') == '對方和你斷開了連接':
        continue
    msgSend = input('>>>')
    sk.sendto(msgSend.encode('utf-8'), msg[1])

'''client'''
import socket

sk = socket.socket(type=socket.SOCK_DGRAM)
server = ('127.0.0.1', 6000)

while True:
    msgSend = input('>>>')
    if msgSend.upper() == 'Q':
        sk.sendto('對方和你斷開了連接'.encode('utf-8'), server)
        break
    sk.sendto(msgSend.encode('utf-8'), server)
    msg = sk.recv(1024).decode('utf-8')
    if msg.upper() == 'Q':
        print('對方和你斷開了連接')
        break
    print(msg)

4,粘包

只出現在tcp協議中,因為tcp協議中多條消息之間沒有邊界,并且還有各種優化算法,因此會導致發送端和接收端都存在粘包現象:

發送端:兩條消息很短,而且發送的間隔時間也很短

接收端:多條消息沒有及時接收,而在接收方的緩存堆在一起導致粘包

'''server'''
import socket

sk = socket.socket()
sk.bind(('127.0.0.1', 6000))
sk.listen()

conn, addr = sk.accept()
conn.send(b'hello')
conn.send(b'byebye')

conn.close()
sk.close()

'''client'''
import time
import socket

sk = socket.socket()
sk.connect(('127.0.0.1', 6000))

time.sleep(0.1)
msg = sk.recv(5)
print(msg)
msg = sk.recv(4)
print(msg)

sk.close()

解決粘包問題的本質:設置邊界(發送長度、發送消息,交替進行)

1,自定義協議

'''server'''
import socket

sk = socket.socket()
sk.bind(('127.0.0.1', 6000))
sk.listen()

conn, addr = sk.accept()
msg1 = input('>>>').encode('utf-8')
msg2 = input('>>>').encode('utf-8')

def sendFunc(msg):
    num = str(len(msg))
    ret = num.zfill(4)
    conn.send(ret.encode('utf-8'))
    conn.send(msg)
sendFunc(msg1)
sendFunc(msg2)

conn.close()
sk.close()

'''client'''
import socket

sk = socket.socket()
sk.connect(('127.0.0.1', 6000))

def receiveFunc():
    num = sk.recv(4).decode('utf-8')
    msg = sk.recv(int(num))
    print(msg.decode('utf-8'))

receiveFunc()
receiveFunc()

sk.close()

2,struct模塊

import struct
'''~2**32, 排除符號位,相當于1G的數據的長度'''

num1 = 1231341234
num2 = 1342342
num3 = 12

ret1 = struct.pack('i', num1)
print(ret1)
print(len(ret1))
ret2 = struct.pack('i', num2)
print(ret2)
print(len(ret2))
ret3 = struct.pack('i', num3)
print(ret3)
print(len(ret3))

ret11 = struct.unpack('i', ret1)
print(ret11)
print(type(ret11[0]))

以上就是python 網絡編程要點總結的詳細內容,更多關于python 網絡編程的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • python神經網絡編程之手寫數字識別
  • Python網絡編程之ZeroMQ知識總結
  • python Socket網絡編程實現C/S模式和P2P
  • python神經網絡編程實現手寫數字識別
  • python網絡編程:socketserver的基本使用方法實例分析
  • python網絡編程socket實現服務端、客戶端操作詳解
  • Python網絡編程之使用TCP方式傳輸文件操作示例
  • Python 網絡編程之UDP發送接收數據功能示例【基于socket套接字】
  • python網絡編程之多線程同時接受和發送
  • python socket網絡編程之粘包問題詳解

標簽:泉州 清遠 岳陽 洛陽 長春 怒江 安慶 吉林

巨人網絡通訊聲明:本文標題《python 網絡編程要點總結》,本文關鍵詞  python,網絡編程,要點,總結,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python 網絡編程要點總結》相關的同類信息!
  • 本頁收集關于python 網絡編程要點總結的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 辰溪县| 枣强县| 孝感市| 旌德县| 岳池县| 怀远县| 盐城市| 无为县| 黔东| 凉山| 临潭县| 哈密市| 威海市| 鄂托克旗| 井研县| 健康| 萍乡市| 米易县| 日喀则市| 八宿县| 大理市| 怀化市| 平和县| 武汉市| 永春县| 平原县| 正镶白旗| 镇宁| 增城市| 呼伦贝尔市| 阳高县| 阳西县| 喀喇沁旗| 阳西县| 精河县| 凤山市| 平度市| 马鞍山市| 河西区| 鄂托克旗| 视频|