python SOCKET編程基礎(chǔ)入門(mén)
一、UDP編程
1.客戶(hù)端Client:發(fā)起訪問(wèn)的一方。
2.服務(wù)器端
3.server段編程
(1)建立socket,socket是負(fù)責(zé)具體通信的一個(gè)實(shí)例
(2)綁定,為創(chuàng)建的socket指派固定的端口和IP地址
(3)接受對(duì)方發(fā)送內(nèi)容
(4)給對(duì)方發(fā)送反饋,此步驟為非必須步驟
4.Client端編程
(1)建立通信的socket
(2)發(fā)送內(nèi)容到指定服務(wù)器
(3)接受服務(wù)器給定的反饋內(nèi)容
5.模擬一下這個(gè)過(guò)程
(1)我們先建立一個(gè)服務(wù)器的函數(shù)
#服務(wù)器案例 import socket #模擬服務(wù)器的函數(shù) def serverFunc(): #1.建立socket #socket.AF_INET:使用IPV4協(xié)議族 #socket.SOCK_DGRAM:使用UDP通信 sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #2.綁定ip和port #127.0.01:這個(gè)ip地址代表的是機(jī)器本身 #7852:隨機(jī)指定的端口號(hào) #地址是一個(gè)tuple類(lèi)型,(ip.port) addr = ("127.0.0.1",7852) sock.bind(addr) #接受對(duì)方消息 #等待方式為死等,沒(méi)有其他可能性 #recvfrom接受的返回值是一個(gè)元組,前一項(xiàng)表示數(shù)據(jù),后一項(xiàng)表示地址 #參數(shù)的含義是緩沖區(qū)大小 #rst = sock.recvfrom(500) data,addr = sock.recvfrom(500) print(data) print(type(data)) #發(fā)送過(guò)來(lái)的數(shù)據(jù)是bytes格式,必須通過(guò)解碼才能得到str格式內(nèi)容 #decode默認(rèn)參數(shù)是utf8 text = data.decode() print(type(text)) print(text) #給對(duì)方反饋的消息 rsp = "I am very hungry now" #發(fā)送的數(shù)據(jù)需要編程成bytes格式 #默認(rèn)時(shí)utf8 data = rsp.encode() sock.sendto(data,addr) if __name__ == "__main__": print("Start Server") serverFunc() print("End Server")
(2)然后創(chuàng)建一個(gè)客戶(hù)端的函數(shù)
import socket def clientFunc(): sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) text = "you are very cool" #發(fā)送的數(shù)據(jù)必須是bytes格式 data = text.encode() #發(fā)送 sock.sendto(data,("127.0.0.1",7852)) data,addr =sock.recvfrom(200) data = data.decode() print(text) if __name__ == "__main__": print("Start Client") clientFunc() print("End Client")
(3)我們先啟動(dòng)服務(wù)器端函數(shù)
出現(xiàn)如下圖像,它是創(chuàng)建了一個(gè)sock,然后自己綁定到127.0.0.1:7852,運(yùn)行到sock.recvfrom(500)這里死等客戶(hù)端發(fā)消息
(4)再啟動(dòng)客戶(hù)端函數(shù)
出現(xiàn)如下發(fā)送編碼后的text內(nèi)容到服務(wù)器(127.0.0.1:7852),服務(wù)器成功接收后返回you are cool這句話。
(5)我們?cè)倏捶?wù)器的函數(shù)那里
接受了bytes格式的字符串,并打印出來(lái)了,然后再解碼打印出來(lái),最后把you are cool返回客戶(hù)端。
(6)這里有個(gè)地方?jīng)]有辦法:因?yàn)槲覀冊(cè)谝慌_(tái)電腦上做的測(cè)試,所以相當(dāng)于自言自語(yǔ),不如在兩臺(tái)電腦上進(jìn)行試驗(yàn)。
二、源碼
D33_1_ServerProgramme.py
D33_2_ClientProgramme.py
https://github.com/ruigege66/Python_learning/blob/master/D33_1_ServerProgramme.py
https://github.com/ruigege66/Python_learning/blob/master/D33_2_ClientProgramme.py
以上就是python SOCKET編程基礎(chǔ)入門(mén)的詳細(xì)內(nèi)容,更多關(guān)于python SOCKET編程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
pytorch 實(shí)現(xiàn)多個(gè)Dataloader同時(shí)訓(xùn)練
這篇文章主要介紹了pytorch 實(shí)現(xiàn)多個(gè)Dataloader同時(shí)訓(xùn)練的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python使用PyAudio制作錄音工具的實(shí)現(xiàn)代碼
這篇文章主要介紹了Python使用PyAudio制作錄音工具,音頻錄制與視頻錄制相似,也是以數(shù)據(jù)幀的方式錄制保存,這次使用強(qiáng)大的第三方包PyAudio和內(nèi)置的wave模塊編寫(xiě),需要的朋友可以參考下2022-04-04python list刪除元素時(shí)要注意的坑點(diǎn)分享
下面小編就為大家分享一篇python list刪除元素時(shí)要注意的坑點(diǎn)分享,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Python2.7環(huán)境Flask框架安裝簡(jiǎn)明教程【已測(cè)試】
這篇文章主要介紹了Python2.7環(huán)境Flask框架安裝方法,結(jié)合實(shí)例形式詳細(xì)分析了Python2.7環(huán)境下安裝Flask框架遇到的問(wèn)題與相關(guān)解決方法、注意事項(xiàng),并給出了一個(gè)基本的測(cè)試示例,需要的朋友可以參考下2018-07-07關(guān)于python列表相關(guān)知識(shí)點(diǎn)
這篇文章主要介紹了關(guān)于python列表相關(guān)知識(shí)點(diǎn),變量可以存儲(chǔ)一個(gè)元素,而列表是一個(gè)大容器,可以存儲(chǔ)N多個(gè)元素,程序可以方便的對(duì)這些數(shù)據(jù)進(jìn)行整體操作,需要的朋友可以參考下2023-04-04python矩陣的轉(zhuǎn)置和逆轉(zhuǎn)實(shí)例
今天小編就為大家分享一篇python矩陣的轉(zhuǎn)置和逆轉(zhuǎn)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12使用Python自制數(shù)據(jù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋
這篇文章主要為大家詳細(xì)介紹了如何使用Python自制數(shù)據(jù)庫(kù)備份工具實(shí)現(xiàn)數(shù)據(jù)定時(shí)覆蓋功能,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下2024-03-03OpenCV自動(dòng)給圖片添加彩虹特效的實(shí)現(xiàn)示例
圖像處理的學(xué)習(xí)往往都是要先熟悉下圖像的一些基本處理方法,本文主要介紹了OpenCV自動(dòng)給圖片添加彩虹特效的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11