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

Python?基于TCP?傳輸協(xié)議的網絡通信實現(xiàn)方法

 更新時間:2022年02月23日 08:22:12   作者:一枚大果殼  
網絡編程指在網絡環(huán)境中,如何實現(xiàn)不在同一物理位置中的計算機之間進行數(shù)據(jù)通信,本文重點給大家介紹Python?基于TCP?傳輸協(xié)議的網絡通信實現(xiàn)方法,感興趣的朋友跟隨小編一起看看吧

1、基礎概念

什么是網絡編程?

指在網絡環(huán)境中,如何實現(xiàn)不在同一物理位置中的計算機之間進行數(shù)據(jù)通信

如果要保證數(shù)據(jù)通信順利完成,則需要先了解如下幾個概念:

1.1 協(xié)議

不同計算機內的進程之間進行數(shù)據(jù)通信時,需要先對數(shù)據(jù)進行封裝或打包后方可以進行傳輸。所謂協(xié)議指通信雙方需要共同遵守的數(shù)據(jù)打包格式。

如同現(xiàn)實世界里郵寄商品一樣:

  • 商品相當于要傳送給對方的數(shù)據(jù):在傳輸之前,需要商品擁有者對商品進行打包,并在打包時填寫上收件人地址、收什人姓名、發(fā)件人地址……這是第一次封裝,在此次封裝過程中遵守的打包格式是由商品打包者完成,這層打包標準可稱為應用層標準或應用層協(xié)議。
  • 包裹會被物流公司收納,物流公司每天會收到需要發(fā)送至全國各地的包裹,所以,需要再次進行分檢,把發(fā)送至同一個地區(qū)的包裹收納在一起,并再次進行打包,并按相應的標準進行信息填寫。可認為第二次打包的標準是郵局標準或郵局協(xié)議.
  • 郵局打包后的包裹會發(fā)送至相關的運輸部門,運輸部門會把從不同郵局收集來的包裹按目的地進行歸類打包,再選擇不同運輸工具進行傳輸,可選擇飛機、貨車、火車……這次打包協(xié)議可稱為傳輸層協(xié)議。

協(xié)議是保證數(shù)據(jù)能被正確傳輸出去的第一操作要素,互聯(lián)網上所遵守的協(xié)議規(guī)范稱為 TCP/IP 協(xié)議。

1.2 IP 地址

在網絡環(huán)境中,需要為每一臺計算機指定一個地址,這個地址叫 IP 地址,其實 IP 地址是一個邏輯地址,而每一臺計算機還有一個物理地址,便是網卡上的 MAC 地址。

IP 地址和 MAC 地址的區(qū)別?

MAC 地址相當于你我的身份證號碼,是固定、不變的。IP 地址相當于你我現(xiàn)在處于的落腳地址.有的人在一年之內,可能會在不同城市工作,也就意味著邏輯地址是可以有多個的。

1.3 端口

一臺計算機上可以安裝多款網絡軟件,如QQ、瀏覽器、網絡游戲……

操作系統(tǒng)如何區(qū)分同一時刻自于網絡的多個數(shù)據(jù)應該交給哪一個軟件處理?

端口相當于操作系統(tǒng)為每一個網絡軟件分配的一個門牌標識符號,用來把從網絡上輸入進來的多數(shù)據(jù)流正確的分流到對應的進程。

當一臺計算機向另一臺計算機發(fā)送數(shù)據(jù)時:

  • 首先對數(shù)據(jù)按協(xié)議格式進行打包
  • 另需要知道對方計算機的地址且還要知道對應進程所監(jiān)聽的端口號.IP+端口號也稱為套接字,或叫socket

有點類似于拜訪朋友時:

先封裝一個禮物盒

然后根據(jù)朋友告訴自己的地址和門牌號前去拜訪

2、TCP 網絡編程實現(xiàn)

TCP 是一種傳輸層協(xié)議,是可靠的面向連接的傳輸層協(xié)議.

2.1 服務器端編程

定義一個函數(shù)用來進行具體的數(shù)據(jù)交互,由子線程調用.

import socket   # socket 模塊
import  time  #時間模塊
import  threading  #線程模塊
def session(sock, addr):
    print('歡迎新 %s:%s...' % addr)
    sock.send(b'Welcome!')
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        # 解碼數(shù)據(jù)
        if not data or data.decode('utf-8') == 'exit':
            break
        sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
    sock.close()
    print('來自于 %s:%s 連接被關閉.' % addr)

創(chuàng)建 socket 監(jiān)聽對象:

#創(chuàng)建 TCP socket
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
#監(jiān)聽端口
server.bind(('127.0.0.1',1234))
server.listen(5)
print('服務器正在等待客戶的連接……')

建立服務監(jiān)聽套接字,需要指定服務類型:

socket.AF_UNIX

只能夠用于單一的Unix系統(tǒng)進程間通信

socket.AF_INET

服務器之間網絡通信

socket.AF_INET6

IPv6

socket.SOCK_STREAM

流式socket , for TCP

socket.SOCK_DGRAM

數(shù)據(jù)報式socket , for UDP

socket.SOCK_RAW

原始套接字,普通的套接字無法處理ICMP、IGMP等網絡報文,而SOCK_RAW可以;其次,SOCK_RAW也可以處理特殊的IPv4報文;此外,利用原始套接字,可以通過IP_HDRINCL套接字選項由用戶構造IP頭。

socket.SOCK_SEQPACKET

可靠的連續(xù)數(shù)據(jù)包服務

while True:
    # 接受一個新連接:
    sock, addr = s.accept()
    # 創(chuàng)建新線程來處理TCP連接:
    t = threading.Thread(target=session, args=(sock, addr)) t.start()

當有客戶連接后,啟動線程完成具體的數(shù)據(jù)處理.

2.2 客戶端編程

客戶端代碼相對而言較簡單.

import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 建立連接:
client.connect(('127.0.0.1', 1234))
# 接收歡迎消息:
print(client.recv(1024).decode('utf-8'))
for data in [b'Rose', b'Think', b'Babala']:
    # 發(fā)送數(shù)據(jù):
    s.send(data)
    print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()

測試結果 :

服務器端

客戶端:

3 總結

Python 提供了相關的模塊,封裝了底層的具體代碼邏輯,對于開發(fā)者而言,只需要按流程按部就班就可以,如果需要更好的理解整個網絡通信的過程,則需要了解相關的網絡知識.

相關文章

  • Python中ttkbootstrap的介紹與基本使用

    Python中ttkbootstrap的介紹與基本使用

    ttkbootstrap是一個基于?tkinter?的界面美化庫,使用這個工具可以開發(fā)出類似前端bootstrap風格的tkinter桌面程序,下面這篇文章主要給大家介紹了關于Python中ttkbootstrap的介紹與基本使用的相關資料,需要的朋友可以參考下
    2023-01-01
  • Pytorch環(huán)境搭建與基本語法

    Pytorch環(huán)境搭建與基本語法

    這篇文章主要介紹了Pytorch環(huán)境搭建與基本語法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 跟老齊學Python之集合(set)

    跟老齊學Python之集合(set)

    本文主要內容是要向各位介紹一種新的數(shù)據(jù)類型:集合(set).徹底暈倒了,到底python有多少個數(shù)據(jù)類型呢?又多出來了一個.
    2014-09-09
  • python 讀取數(shù)據(jù)庫并繪圖的實例

    python 讀取數(shù)據(jù)庫并繪圖的實例

    今天小編就為大家分享一篇python 讀取數(shù)據(jù)庫并繪圖的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • keras中模型訓練class_weight,sample_weight區(qū)別說明

    keras中模型訓練class_weight,sample_weight區(qū)別說明

    這篇文章主要介紹了keras中模型訓練class_weight,sample_weight區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python如何用str.format()批量生成網址(豆瓣讀書為例)

    Python如何用str.format()批量生成網址(豆瓣讀書為例)

    這篇文章主要介紹了Python如何用str.format()批量生成網址(豆瓣讀書為例),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • pandas to_excel 添加顏色操作

    pandas to_excel 添加顏色操作

    這篇文章主要介紹了pandas to_excel 添加顏色操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python字典和集合講解

    Python字典和集合講解

    這篇文章主要給大家假關節(jié)的是Python字典和集合,字典是Python內置的數(shù)據(jù)結構之一,是一個無序的序列;而集合是python語言提供的內置數(shù)據(jù)結構,沒有value的字典,集合類型與其他類型最大的區(qū)別在于,它不包含重復元素。想具體了解有關python字典與集合,請看下面文章內容
    2021-10-10
  • Python學習資料

    Python學習資料

    Python學習資料...
    2007-02-02
  • tensorflow實現(xiàn)對張量數(shù)據(jù)的切片操作方式

    tensorflow實現(xiàn)對張量數(shù)據(jù)的切片操作方式

    今天小編就為大家分享一篇tensorflow實現(xiàn)對張量數(shù)據(jù)的切片操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評論