国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python Socket網(wǎng)絡(luò)編程

這篇具有很好參考價值的文章主要介紹了Python Socket網(wǎng)絡(luò)編程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

Socket概念

Python Socket編程

發(fā)送接收緩沖? 消息格式定義


Socket概念

?Socket套接字,一種獨立于協(xié)議的網(wǎng)絡(luò)編程接口,就是對網(wǎng)絡(luò)中不同主機上的應(yīng)用進程之間進行雙向通信的端點。

TCP把連接作為最基本的對象,每一條TCP連接都有兩個端點,這種端點我們叫作套接字(socket)。

IP層的ip地址可以唯一標示主機,而TCP層協(xié)議和端口號可以唯一標示主機的一個進程,這樣我們可以利用ip地址+協(xié)議+端口號唯一標示網(wǎng)絡(luò)中的一個進程。 能夠唯一標示網(wǎng)絡(luò)中的進程后,它們就可以利用socket進行通信了

?Python Socket網(wǎng)絡(luò)編程

、Python Socket網(wǎng)絡(luò)編程

Python Socket編程

使用python內(nèi)置的socket庫,目前socket編程,最多是通過tcp協(xié)議進行網(wǎng)絡(luò)通訊的。

tcp進行通訊的程序雙方,分為服務(wù)端和客戶端。

tcp協(xié)議進行通訊的雙方,是需要先建立一個虛擬連接的,然后雙方程序員才能發(fā)送業(yè)務(wù)數(shù)據(jù)信息。

服務(wù)端需要四個步驟:

??????? 1.新建socket

????????2.綁定IP和端口號

??????? 3.監(jiān)聽連接

??????? 4.收發(fā)消息

客戶端需要三個步驟:

??????? 1.新建socket

??????? 2.連接服務(wù)器端

??????? 3.發(fā)收消息

Python Socket網(wǎng)絡(luò)編程

服務(wù)端比客戶端先運行,服務(wù)端先運行然后等待客戶端連接

#TCP 服務(wù)端端程序 server.py
#導(dǎo)入socket庫
from socket import *
#主機地址為0.0.0.0,表示綁定本機所有網(wǎng)絡(luò)接口ip地址
#等待客戶端來連接
IP='127.0.0.1'
#端口號
PORT=50000
#定義一次從socket緩沖區(qū)最多讀入512個字節(jié)數(shù)據(jù)
BUFLEN=512

#實例化一個socket對象
#參數(shù) AF_INET 表示該socket網(wǎng)絡(luò)層使用IP協(xié)議
#參數(shù) SOCK_STREAM 表示該socket傳輸層使用tcp協(xié)議
listenSocket=socket(AF_INET,SOCK_STREAM)

#socket綁定地址和端口
listenSocket.bind((IP,PORT))

#使socket處于監(jiān)聽狀態(tài),等待客戶端的連接請求
#調(diào)用了.listen,就把socket置于等待連接狀態(tài)
#參數(shù)5表示 最多接受多少個等待連接的客戶端
listenSocket.listen(5)
print(f'服務(wù)端啟動成功,在{PORT}端口等待客戶端連接...')

#接收客戶端連接,無客戶端連接時,就處于睡眠狀態(tài)
dataSocket,addr=listenSocket.accept()
print('接受一個客戶端連接:',addr)

while True:
    #嘗試讀取對方發(fā)送的消息
    #BUFLEN 指定從接收緩沖里最多讀取多少字節(jié)
    recved=dataSocket.recv(BUFLEN)

    #如果返回空bytes,表示對方關(guān)閉了連接
    #退出循環(huán),結(jié)束消息收發(fā)
    if not recved:
        break

    #讀取的學(xué)節(jié)數(shù)據(jù)是bytes類型,需要解碼為字符串
    info=recved.decode()
    print(f'收到對方信息:{info}')

    #發(fā)送的數(shù)據(jù)類型必須是bytes,所以要編碼
    dataSocket.send(f'服務(wù)端接收到了信息{info}'.encode())

#服務(wù)端也調(diào)用close()關(guān)閉socket
dataSocket.close()
listenSocket.close()
#TCP 客戶端程序 client.py
from socket import *
IP='127.0.0.1'
SERVER_PORT=50000
BUFLEN=512

#實例化一個socket對象,指明協(xié)議
dataSocket =socket(AF_INET,SOCK_STREAM)

#連接服務(wù)端socket
dataSocket.connect((IP,SERVER_PORT))

while True:
    #從終端讀入用戶輸入的字符串
    toSend =input('>>>')

    # 退出,跳出循環(huán)
    if toSend =='exit':
        break

    #發(fā)送消息,也要編碼為 bytes
    dataSocket.send(toSend.encode())

    #等待接收服務(wù)段的消息,如果沒有消息就一直等待
    recved=dataSocket.recv(BUFLEN)

    #如果返回空bytes,表示對方關(guān)閉了連接
    if not recved:
        break

    #打印讀取的信息
        print(recved.decode())
dataSocket.close()

運行代碼之前,先查看的有沒有處于50000的端口,然后執(zhí)行server.py再查看端口,然后執(zhí)行client.py再查看端口。

Python Socket網(wǎng)絡(luò)編程

?建立連接后,就能收發(fā)信息了

Python Socket網(wǎng)絡(luò)編程Python Socket網(wǎng)絡(luò)編程

發(fā)送接收緩沖? 消息格式定義

編程的時候,如果要跟某個IP建立連接,我們需要調(diào)用操作系統(tǒng)提供的?socket API。

socket?在操作系統(tǒng)層面,可以理解為一個文件。我們可以對這個文件進行一些方法操作。

  • listen方法,可以讓程序作為服務(wù)器監(jiān)聽其他客戶端的連接。
  • connect,可以作為客戶端連接服務(wù)器。
  • sendwrite可以發(fā)送數(shù)據(jù),recvread可以接收數(shù)據(jù)。

在建立好連接之后,如果我們想給遠端服務(wù)發(fā)點什么東西,那就只需要對這個文件執(zhí)行寫操作就行了。

剩下的發(fā)送工作自然就是由操作系統(tǒng)內(nèi)核來完成了。

既然是寫給操作系統(tǒng),那操作系統(tǒng)就需要提供一個地方給用戶寫。同理,接收消息也是一樣。這個地方就是?socket 緩沖區(qū)。

  • 用戶發(fā)送消息的時候?qū)懡o send buffer(發(fā)送緩沖區(qū))
  • 用戶接收消息的時候?qū)懡o recv buffer(接收緩沖區(qū))

也就是說一個socket ,會帶有兩個緩沖區(qū),一個用于發(fā)送,一個用于接收。因為這是個先進先出的結(jié)構(gòu),有時候也叫它們發(fā)送、接收隊列。

?在企業(yè)中開發(fā)的程序通信,消息往往有格式定義。消息的格式定義可以歸入OSI中的表示層

比如:定義的消息,包括消息頭和消息體。

消息頭存放消息的數(shù)據(jù)格式(消息的長度、類型、狀態(tài)等),消息體存放具體傳送的數(shù)據(jù)。

對于TCP協(xié)議傳輸信息的程序來說,格式一定要有明確規(guī)定的消息邊界。因為TCP傳輸?shù)氖亲止?jié)流(bytes stream),如果消息中沒有指定邊界或者長度,接收方就不知道完整的消息從字節(jié)流的哪里開始,到哪里結(jié)束。

指定消息的邊界有兩種方式:

??????? 1.用特殊字節(jié)作為消息的結(jié)尾符號

?????????? 可以用消息中不易出現(xiàn)的字符串(比如 FFFFFF)作為消息的結(jié)尾字符

??????? 2.在消息開頭某個位置,直接指定消息的長度

??????????? UDP協(xié)議通常不用指定邊界,因為UDP是數(shù)據(jù)報協(xié)議,應(yīng)用程序從socket接收到的

??????????? 必定是發(fā)送方發(fā)送的完整消息。{:.notice-info}文章來源地址http://www.zghlxwxcb.cn/news/detail-466610.html

到了這里,關(guān)于Python Socket網(wǎng)絡(luò)編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python中兩種網(wǎng)絡(luò)編程方式:Socket和HTTP協(xié)議

    本文分享自華為云社區(qū)《Python網(wǎng)絡(luò)編程實踐從Socket到HTTP協(xié)議的探索與實現(xiàn)》,作者:檸檬味擁抱。 在當今互聯(lián)網(wǎng)時代,網(wǎng)絡(luò)編程是程序員不可或缺的一項技能。Python作為一種高級編程語言,提供了豐富的網(wǎng)絡(luò)編程庫,使得開發(fā)者能夠輕松地實現(xiàn)各種網(wǎng)絡(luò)應(yīng)用。本文將介紹P

    2024年04月16日
    瀏覽(34)
  • python 學(xué)習之 socket 庫的基本使用(網(wǎng)絡(luò)編程-套接字)

    python 學(xué)習之 socket 庫的基本使用(網(wǎng)絡(luò)編程-套接字)

    目錄 一、關(guān)于 socket 的介紹 二、創(chuàng)建套接字對象(Socket 的實例化) 三、套接字對象方法(Socket 常用函數(shù)) 1、bind 函數(shù) 2、listen 函數(shù) 3、accept 函數(shù) 4、connect 與 connect_ex 函數(shù) 5、send 、?sendall 、sendto 函數(shù) 6、recv 與?recvfrom 函數(shù) 7、close 函數(shù) 三、簡單的服務(wù)端和客戶端示例 四、

    2024年02月20日
    瀏覽(88)
  • Python網(wǎng)絡(luò)編程基礎(chǔ)之ip地址,端口號,TCP,socket

    Python網(wǎng)絡(luò)編程基礎(chǔ)之ip地址,端口號,TCP,socket

    IP地址 IP地址 (Internet Protocol Address)是指互聯(lián)網(wǎng)協(xié)議地址,又譯為網(wǎng)際協(xié)議地址。 IP地址是IP協(xié)議提供的一種統(tǒng)一的地址格式,它為互聯(lián)網(wǎng)上的每一個網(wǎng)絡(luò)和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址的差異。 換而言之,IP 地址就是標識網(wǎng)絡(luò)中設(shè)備的一個地址,好比

    2024年02月02日
    瀏覽(22)
  • python網(wǎng)絡(luò)編程:通過socket實現(xiàn)TCP客戶端和服務(wù)端

    python網(wǎng)絡(luò)編程:通過socket實現(xiàn)TCP客戶端和服務(wù)端

    目錄 寫在開頭 socket服務(wù)端(基礎(chǔ)) socket客戶端(基礎(chǔ)) 服務(wù)端實現(xiàn)(可連接多個客戶端)? 客戶端實現(xiàn) 數(shù)據(jù)收發(fā)效果 ? 近期可能會用python實現(xiàn)一些網(wǎng)絡(luò)安全工具,涉及到許多關(guān)于網(wǎng)絡(luò)的知識,逃不過的就是最基本的socket。本文將介紹如何通過python自帶的socket庫實現(xiàn)TCP客戶

    2024年03月21日
    瀏覽(27)
  • 【Python】Python 網(wǎng)絡(luò)編程 ( Socket 套接字簡介 | Socket 套接字使用步驟 | Socket 套接字服務(wù)端與客戶端開發(fā) )

    【Python】Python 網(wǎng)絡(luò)編程 ( Socket 套接字簡介 | Socket 套接字使用步驟 | Socket 套接字服務(wù)端與客戶端開發(fā) )

    Socket 套接字 是一種 進程之間的 通信機制 , 通過套接字可以在 不同的進程之間 進行數(shù)據(jù)交換 ; 在 網(wǎng)絡(luò)編程 中 , Socket 套接字 主要用于 客戶端 與 服務(wù)器 之間的 通信 , 大部分 網(wǎng)絡(luò)相關(guān)的應(yīng)用程序 , 都使用到了 Socket 套接字技術(shù) ; 套接字有兩種類型 : 流套接字 : 提供了一個可

    2024年02月15日
    瀏覽(604)
  • Python網(wǎng)絡(luò)編程(一)——了解IP和端口的基礎(chǔ)知識以及socket的簡單實現(xiàn)

    Python網(wǎng)絡(luò)編程(一)——了解IP和端口的基礎(chǔ)知識以及socket的簡單實現(xiàn)

    Python網(wǎng)絡(luò)編程(一)——了解IP和端口的基礎(chǔ)知識以及socket的簡單實現(xiàn) IP(Internet Protocol) 地址是唯一標識互聯(lián)網(wǎng)上連接至計算機或其他設(shè)備的地址。每一個設(shè)備在 IP 網(wǎng)絡(luò)中擁有一個不同的 IP 地址,它由 32 位二進制數(shù)組成,通常表示為四個從 0 到 255 的十進制數(shù)之間用 (.)

    2024年02月04日
    瀏覽(22)
  • 【socket】從計算機網(wǎng)絡(luò)基礎(chǔ)到socket編程——Windows && Linux C語言 + Python實現(xiàn)(TCP+UDP)

    【socket】從計算機網(wǎng)絡(luò)基礎(chǔ)到socket編程——Windows && Linux C語言 + Python實現(xiàn)(TCP+UDP)

    簡單講一下基礎(chǔ)知識,便于后面代碼的理解,建議大概瀏覽一下這一小節(jié)內(nèi)容。這里講的只是冰山一角,建議大家學(xué)習計算機網(wǎng)絡(luò)相關(guān)知識,推薦幾本書: 《計算機網(wǎng)絡(luò)》(謝希仁) 《計算機網(wǎng)絡(luò) 自頂向下方法》 《計算機網(wǎng)絡(luò)技術(shù)》 《計算機網(wǎng)絡(luò)基礎(chǔ)及應(yīng)用》 《Linux C從入

    2024年02月08日
    瀏覽(22)
  • python網(wǎng)絡(luò)編程:處理socket報錯“ConnectionResetError: [WinError 10054] 遠程主機強迫關(guān)閉了一個現(xiàn)有的連接?!钡膯栴}

    python網(wǎng)絡(luò)編程:處理socket報錯“ConnectionResetError: [WinError 10054] 遠程主機強迫關(guān)閉了一個現(xiàn)有的連接?!钡膯栴}

    由于這個問題網(wǎng)上的資料特別少,所以在這里記錄一下。 當使用socket以udp形式向?qū)Ψ桨l(fā)送數(shù)據(jù)時(局域網(wǎng)),如果對方的ip和端口未開啟,導(dǎo)致未接收,然后使用socket接收時就會出現(xiàn)一串報錯信息 產(chǎn)生這個信息的原因是因為發(fā)送的信息沒有傳輸成功,而報錯的提示會產(chǎn)生在之

    2024年02月09日
    瀏覽(25)
  • 【網(wǎng)絡(luò)編程】TCP Socket編程

    【網(wǎng)絡(luò)編程】TCP Socket編程

    流套接字: 使用傳輸層TCP協(xié)議 TCP: 即Transmission Control Protocol(傳輸控制協(xié)議),傳輸層協(xié)議。 TCP的特點: 有連接 可靠傳輸 面向字節(jié)流 有接收緩沖區(qū),也有發(fā)送緩沖區(qū) 大小不限 ServerSocket 是 創(chuàng)建TCP服務(wù)端Socket 的API。 注意: ServerSocket 只能用于 服務(wù)器端。 構(gòu)造方法: 方法簽名

    2024年02月07日
    瀏覽(26)
  • 【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程 和 Socket 套接字認識

    【網(wǎng)絡(luò)編程】網(wǎng)絡(luò)編程 和 Socket 套接字認識

    ?個人主頁:bit me?? ?當前專欄:Java EE初階?? 用戶在瀏覽器中,打開在線視頻網(wǎng)站,如優(yōu)酷看視頻,實質(zhì)是通過網(wǎng)絡(luò),獲取到網(wǎng)絡(luò)上的一個視頻資源。 與本地打開視頻文件類似,只是視頻文件這個資源的來源是網(wǎng)絡(luò)。 相比本地資源來說,網(wǎng)絡(luò)提供了更為豐富的網(wǎng)絡(luò)資源:

    2023年04月15日
    瀏覽(516)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包