基于python中的TCP及UDP(詳解)
python中是通過套接字即socket來實(shí)現(xiàn)UDP及TCP通信的。有兩種套接字面向連接的及無連接的,也就是TCP套接字及UDP套接字。
TCP通信模型
創(chuàng)建TCP服務(wù)器
偽代碼:
ss = socket() # 創(chuàng)建服務(wù)器套接字 ss.bind() # 套接字與地址綁定 ss.listen() # 監(jiān)聽連接 inf_loop: # 服務(wù)器無限循環(huán) cs = ss.accept() # 接受客戶端連接 comm_loop: # 通信循環(huán) cs.recv()/cs.send() # 對(duì)話(接收/發(fā)送) cs.close() # 關(guān)閉客戶端套接字 ss.close() # 關(guān)閉服務(wù)器套接字#(可選)
TCP時(shí)間戳服務(wù)器:
import socket from time import ctime HOST = '' PORT = 8099 BUFSIZE = 1024 ADDR = (HOST, PORT) tcpSerSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen(5) while True: print("等待連接......") tcpCliSock, addr = tcpSerSock.accept() print("...接收到連接:", addr) while True: data = tcpSerSock.recv(BUFSIZE) if not data: break tcpCliSock.send('[%s] %s' % (bytes(ctime(), 'utf-8'), data)) tcpCliSock.close() tcpSerSock.close()
創(chuàng)建TCP客戶端:
偽代碼:
cs = socket() # 創(chuàng)建客戶端套接字 cs.connect() # 嘗試連接服務(wù)器 comm_loop: # 通信循環(huán) cs.send() / cs.recv() # 對(duì)話(發(fā)送/接收) cs.close() # 關(guān)閉客戶端套接字
TCP時(shí)間戳客戶端:
import socket HOST = 'localhost' PORT = 8099 BUFSIZE = 1024 ADDR = (HOST, PORT) tcpCliSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcpCliSock.connect(ADDR) while True: data = input("> ") if not data: break tcpCliSock.send(data) data = tcpCliSock.recv(BUFSIZE) if not data: break print(data) tcpCliSock.close()
UDP通信模型
創(chuàng)建UDP服務(wù)器
偽代碼:
ss = socket() # 創(chuàng)建服務(wù)器套接字 ss.bind() # 綁定服務(wù)器套接字 inf_loop: # 服務(wù)器無限循環(huán) cs = ss.recvfrom()/ss.sendto() # 關(guān)閉(接收/發(fā)送) ss.close() # 關(guān)閉服務(wù)器套接字
UDP時(shí)間戳服務(wù)器:
import socket from time import ctime HOST = '' PORT = 8099 BUFSIZE = 1024 ADDR = (HOST, PORT) udpSerSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udpSerSock.bind(ADDR) while True: print("等待連接......") data, addr = udpSerSock.recvfrom(BUFSIZE) udpSerSock.sendto('[%s] %s' % (ctime(), data), addr) print("...接收到連接:", addr) udpSerSock.close()
創(chuàng)建UDP客戶端
偽代碼:
cs = socket() # 創(chuàng)建客戶端套接字 comm_loop: # 通信循環(huán) cs.sendto() / cs.recvfrom() # 對(duì)話(發(fā)送/接收) cs.close() # 關(guān)閉客戶端套接字
UDP時(shí)間戳客戶端:
import socket HOST = 'localhost' PORT = 8099 BUFSIZE = 1024 ADDR = (HOST, PORT) udpCliSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udpCliSock.connect(ADDR) while True: data = input("> ") if not data: break udpCliSock.sendto(data, ADDR) data, ADDR = udpCliSock.recvfrom(BUFSIZE) if not data: break print(data) udpCliSock.close()
以上這篇基于python中的TCP及UDP(詳解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python實(shí)現(xiàn)基于TCP UDP協(xié)議的IPv4 IPv6模式客戶端和服務(wù)端功能示例
- Python網(wǎng)絡(luò)編程之TCP與UDP協(xié)議套接字用法示例
- Python網(wǎng)絡(luò)編程使用select實(shí)現(xiàn)socket全雙工異步通信功能示例
- python編程之requests在網(wǎng)絡(luò)請(qǐng)求中添加cookies參數(shù)方法詳解
- python網(wǎng)絡(luò)編程調(diào)用recv函數(shù)完整接收數(shù)據(jù)的三種方法
- Python網(wǎng)絡(luò)編程中urllib2模塊的用法總結(jié)
- python網(wǎng)絡(luò)編程之TCP通信實(shí)例和socketserver框架使用例子
- python網(wǎng)絡(luò)編程 使用UDP、TCP協(xié)議收發(fā)信息詳解
相關(guān)文章
python中pandas.DataFrame對(duì)行與列求和及添加新行與列示例
pandas是python環(huán)境下最有名的數(shù)據(jù)統(tǒng)計(jì)包,而DataFrame翻譯為數(shù)據(jù)框,是一種數(shù)據(jù)組織方式,這篇文章主要給大家介紹了python中pandas.DataFrame對(duì)行與列求和及添加新行與列的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03Python實(shí)現(xiàn)在某個(gè)數(shù)組中查找一個(gè)值的算法示例
今天小編就為大家分享一篇Python實(shí)現(xiàn)在某個(gè)數(shù)組中查找一個(gè)值的算法示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06python讀取與處理netcdf數(shù)據(jù)方式
今天小編就為大家分享一篇python讀取與處理netcdf數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02對(duì)json字符串與python字符串的不同之處詳解
今天小編就為大家分享一篇對(duì)json字符串與python字符串的不同之處詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12PyQt5實(shí)現(xiàn)簡(jiǎn)易電子詞典
這篇文章主要為大家詳細(xì)介紹了PyQt5實(shí)現(xiàn)簡(jiǎn)易電子詞典,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06