溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

python之怎么使用socket

發(fā)布時(shí)間:2021-11-02 15:46:36 來(lái)源:億速云 閱讀:429 作者:iii 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“python之怎么使用socket”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“python之怎么使用socket”吧!

01:OSI模型

1)OSI模型包括應(yīng)用層、表示層、會(huì)話(huà)層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層這7層。常用的主要是應(yīng)用層和傳輸層,其余就不一一介紹。

2)應(yīng)用層:網(wǎng)絡(luò)服務(wù)和一些終端的應(yīng)用。比如HTTP協(xié)議、FTP協(xié)議

3)傳輸層:定義了一些傳輸數(shù)據(jù)的協(xié)議和端口號(hào)。如UDP協(xié)議、TCP協(xié)議

02:網(wǎng)絡(luò)通信三要素(IP地址、端口號(hào)、傳輸協(xié)議)

1)IP地址:表示網(wǎng)絡(luò)上一臺(tái) 獨(dú)立的主機(jī) ; IP地址=網(wǎng)絡(luò)地址+主機(jī)地址。其中特殊的IP地址:127.0.0.1(本地回環(huán)地址),表示本機(jī)

2)端口號(hào):用于標(biāo)識(shí)進(jìn)程的邏輯地址;不同的進(jìn)程都有不同的端口標(biāo)識(shí)。

3)傳輸協(xié)議:通訊的規(guī)則。

①UDP:用戶(hù)數(shù)據(jù)報(bào)協(xié)議。面向無(wú)連接,傳輸數(shù)據(jù)之前源端和目的端不需要建立連接。如實(shí)時(shí)在線聊天、視頻會(huì)議等

②TCP:傳輸控制協(xié)議。面向連接,傳輸數(shù)據(jù)之前需要建立連接。在連接過(guò)程中進(jìn)行大量數(shù)據(jù)傳輸,通過(guò)“三次握手”的方式完成連接,是安全可靠協(xié)議。傳輸速度慢效率低

03:TCP三次握手

1)TCP建立連接時(shí)要傳輸三個(gè)數(shù)據(jù)包,俗稱(chēng)三次握手(Three-way Handshaking)通俗的理解為:

套接字A:“你好,套接字B,我這里有數(shù)據(jù)要傳送給你,建立連接吧?!碧捉幼諦:“好的,我這邊已準(zhǔn)備就緒?!碧捉幼諥:“謝謝你受理我的請(qǐng)求?!?/p>

2)三次握手完成,TCP客戶(hù)端和服務(wù)器端成功地建立連接,可以開(kāi)始傳輸數(shù)據(jù)了。

04:socket通信流程

1)創(chuàng)建服務(wù)端socket對(duì)象。對(duì)象創(chuàng)建時(shí),需要綁定它的IP地址(IPv4或Ipv6)和協(xié)議(TCP或UDP)。 bind()綁定本機(jī)IP地址和端口號(hào),listen()啟動(dòng)監(jiān)聽(tīng)等待客戶(hù)端發(fā)送的請(qǐng)求。至此服務(wù)端建立完成。

2)創(chuàng)建服務(wù)端socket對(duì)象。根據(jù)服務(wù)端IP地址和端口號(hào)試圖連接服務(wù)端socket端。

3)服務(wù)端監(jiān)聽(tīng)接收accept()到客戶(hù)端發(fā)送的請(qǐng)求,建立與客戶(hù)端的連接connect()。

4)連接建立后,客戶(hù)端可以發(fā)送send()數(shù)據(jù)到socket對(duì)象中,服務(wù)端可以接收recv()到客戶(hù)端發(fā)送的數(shù)據(jù)。

5)服務(wù)端處理數(shù)據(jù)后,可以向socket對(duì)象返回一個(gè)send()處理結(jié)果,客戶(hù)端讀取recv()到這個(gè)返回結(jié)

6)客戶(hù)端關(guān)閉close()連接,客戶(hù)端釋放當(dāng)前占用的客戶(hù)端端口號(hào)

7)服務(wù)端收到客戶(hù)端關(guān)閉消息后,關(guān)閉與客戶(hù)端的連接

05:socket常用方法

1)概述:又稱(chēng)"套接字",應(yīng)用程序通常通過(guò)"套接字"向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求,使主機(jī)間或者一臺(tái)計(jì)算機(jī)上的進(jìn)程間可以通訊。

2)方法分類(lèi):服務(wù)端套接字、客戶(hù)端套接字、公共用途套接字

①服務(wù)端:bind、listen、accept

②客戶(hù)端:connet等

③公共端:recv、send、sendall、close等

3)注意事項(xiàng):socket進(jìn)入阻塞狀態(tài),即 accept()方法一直等到客戶(hù)端返回連接信息后才返回,開(kāi)始接收下一個(gè)客戶(hù)端連接請(qǐng)求

06:服務(wù)端與客戶(hù)端的簡(jiǎn)單通信

發(fā)送數(shù)據(jù):通過(guò)bytes類(lèi)型進(jìn)行傳輸,需要通過(guò)bytes(sendData)轉(zhuǎn)換

接收數(shù)據(jù):通過(guò)str類(lèi)型接收,需要通過(guò)str(client_data)轉(zhuǎn)換

accept():接受并建立與客戶(hù)端的連接,程序在此處開(kāi)始阻塞,只有到客戶(hù)端連接起來(lái)。

#服務(wù)端代碼 
import socket 
sk=socket.socket()#創(chuàng)建服務(wù)端socket對(duì)象 
ip_port=('127.0.0.1',13008)
sk.bind(ip_port)#綁定IP地址和端口號(hào) 
sk.listen(5)#開(kāi)始監(jiān)聽(tīng)是否有請(qǐng)求:同時(shí)最多允許有5個(gè)連接 
print('等待客戶(hù)端的連接')#釋放信號(hào) 
coon,addr=sk.accept()#連接成功后會(huì)返回一個(gè)新的套接字和客戶(hù)端地址 
print('客戶(hù)端新的連接:',addr)
client_data=coon.recv(1024)#接收數(shù)據(jù):一次性接收1024字節(jié) 
print(str(client_data,encoding='utf8'))
sendData=input('請(qǐng)輸入>>>')
coon.sendall(bytes(sendData,encoding='utf8'))#發(fā)送數(shù)據(jù) 
coon.close()#關(guān)閉資源 
sk.close()
#客戶(hù)端代碼 
import socket sk=socket.socket()#創(chuàng)建客戶(hù)端socket對(duì)象 
ip_port=('127.0.0.1',13008)
sk.connect(ip_port)#發(fā)起連接 
sendData=input('請(qǐng)輸入>>>')
sk.sendall(bytes(sendData,encoding='utf8'))#發(fā)送數(shù)據(jù):通過(guò)bytes類(lèi)型進(jìn)行傳輸 
sever_data=sk.recv(1024)#接收數(shù)據(jù):一次性接收1024字節(jié) 
print(str(sever_data,encoding='utf8'))#接收數(shù)據(jù):通過(guò)str類(lèi)型來(lái)接收 
sk.close()

到此,相信大家對(duì)“python之怎么使用socket”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI