本篇內(nèi)容主要講解“python之怎么使用socket”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“python之怎么使用socket”吧!
成都創(chuàng)新互聯(lián)一直通過網(wǎng)站建設(shè)和網(wǎng)站營銷幫助企業(yè)獲得更多客戶資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、移動互聯(lián)產(chǎn)品、全網(wǎng)營銷推廣服務(wù)為核心業(yè)務(wù)。十年網(wǎng)站制作的經(jīng)驗,使用新網(wǎng)站建設(shè)技術(shù),全新開發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。
1)OSI模型包括應(yīng)用層、表示層、會話層、傳輸層、網(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é)議和端口號。如UDP協(xié)議、TCP協(xié)議
1)IP地址:表示網(wǎng)絡(luò)上一臺 獨(dú)立的主機(jī) ; IP地址=網(wǎng)絡(luò)地址+主機(jī)地址。其中特殊的IP地址:127.0.0.1(本地回環(huán)地址),表示本機(jī)
2)端口號:用于標(biāo)識進(jìn)程的邏輯地址;不同的進(jìn)程都有不同的端口標(biāo)識。
3)傳輸協(xié)議:通訊的規(guī)則。
①UDP:用戶數(shù)據(jù)報協(xié)議。面向無連接,傳輸數(shù)據(jù)之前源端和目的端不需要建立連接。如實(shí)時在線聊天、視頻會議等
②TCP:傳輸控制協(xié)議。面向連接,傳輸數(shù)據(jù)之前需要建立連接。在連接過程中進(jìn)行大量數(shù)據(jù)傳輸,通過“三次握手”的方式完成連接,是安全可靠協(xié)議。傳輸速度慢效率低
1)TCP建立連接時要傳輸三個數(shù)據(jù)包,俗稱三次握手(Three-way Handshaking)通俗的理解為:
套接字A:“你好,套接字B,我這里有數(shù)據(jù)要傳送給你,建立連接吧?!碧捉幼諦:“好的,我這邊已準(zhǔn)備就緒?!碧捉幼諥:“謝謝你受理我的請求。”
2)三次握手完成,TCP客戶端和服務(wù)器端成功地建立連接,可以開始傳輸數(shù)據(jù)了。
1)創(chuàng)建服務(wù)端socket對象。對象創(chuàng)建時,需要綁定它的IP地址(IPv4或Ipv6)和協(xié)議(TCP或UDP)。 bind()綁定本機(jī)IP地址和端口號,listen()啟動監(jiān)聽等待客戶端發(fā)送的請求。至此服務(wù)端建立完成。
2)創(chuàng)建服務(wù)端socket對象。根據(jù)服務(wù)端IP地址和端口號試圖連接服務(wù)端socket端。
3)服務(wù)端監(jiān)聽接收accept()到客戶端發(fā)送的請求,建立與客戶端的連接connect()。
4)連接建立后,客戶端可以發(fā)送send()數(shù)據(jù)到socket對象中,服務(wù)端可以接收recv()到客戶端發(fā)送的數(shù)據(jù)。
5)服務(wù)端處理數(shù)據(jù)后,可以向socket對象返回一個send()處理結(jié)果,客戶端讀取recv()到這個返回結(jié)
6)客戶端關(guān)閉close()連接,客戶端釋放當(dāng)前占用的客戶端端口號
7)服務(wù)端收到客戶端關(guān)閉消息后,關(guān)閉與客戶端的連接
1)概述:又稱"套接字",應(yīng)用程序通常通過"套接字"向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求,使主機(jī)間或者一臺計算機(jī)上的進(jìn)程間可以通訊。
2)方法分類:服務(wù)端套接字、客戶端套接字、公共用途套接字
①服務(wù)端:bind、listen、accept
②客戶端:connet等
③公共端:recv、send、sendall、close等
3)注意事項:socket進(jìn)入阻塞狀態(tài),即 accept()方法一直等到客戶端返回連接信息后才返回,開始接收下一個客戶端連接請求
發(fā)送數(shù)據(jù):通過bytes類型進(jìn)行傳輸,需要通過bytes(sendData)轉(zhuǎn)換
接收數(shù)據(jù):通過str類型接收,需要通過str(client_data)轉(zhuǎn)換
accept():接受并建立與客戶端的連接,程序在此處開始阻塞,只有到客戶端連接起來。
#服務(wù)端代碼 import socket sk=socket.socket()#創(chuàng)建服務(wù)端socket對象 ip_port=('127.0.0.1',13008) sk.bind(ip_port)#綁定IP地址和端口號 sk.listen(5)#開始監(jiān)聽是否有請求:同時最多允許有5個連接 print('等待客戶端的連接')#釋放信號 coon,addr=sk.accept()#連接成功后會返回一個新的套接字和客戶端地址 print('客戶端新的連接:',addr) client_data=coon.recv(1024)#接收數(shù)據(jù):一次性接收1024字節(jié) print(str(client_data,encoding='utf8')) sendData=input('請輸入>>>') coon.sendall(bytes(sendData,encoding='utf8'))#發(fā)送數(shù)據(jù) coon.close()#關(guān)閉資源 sk.close()
#客戶端代碼 import socket sk=socket.socket()#創(chuàng)建客戶端socket對象 ip_port=('127.0.0.1',13008) sk.connect(ip_port)#發(fā)起連接 sendData=input('請輸入>>>') sk.sendall(bytes(sendData,encoding='utf8'))#發(fā)送數(shù)據(jù):通過bytes類型進(jìn)行傳輸 sever_data=sk.recv(1024)#接收數(shù)據(jù):一次性接收1024字節(jié) print(str(sever_data,encoding='utf8'))#接收數(shù)據(jù):通過str類型來接收 sk.close()
到此,相信大家對“python之怎么使用socket”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!