Python Socket使用實例
Python在網(wǎng)絡(luò)通訊方面功能強大,學習一下Socket通訊的基本方式
UDP通訊:
Server:
import socket port=8081 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #從指定的端口,從任何發(fā)送者,接收UDP數(shù)據(jù) s.bind(('',port)) print('正在等待接入...') while True: #接收一個數(shù)據(jù) data,addr=s.recvfrom(1024) print('Received:',data,'from',addr)
Client:
import socket port=8081 host='localhost' s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) s.sendto(b'hello,this is a test info !',(host,port))
很簡單 。下面是TCP方式:
Server:
#-*- coding: utf-8 -*- from socket import * from time import ctime HOST='' PORT=12345 BUFSIZ=1024 ADDR=(HOST, PORT) sock=socket(AF_INET, SOCK_STREAM) sock.bind(ADDR) sock.listen(5) while True: print('waiting for connection') tcpClientSock, addr=sock.accept() print('connect from ', addr) while True: try: data=tcpClientSock.recv(BUFSIZ) except: print(e) tcpClientSock.close() break if not data: break s='Hi,you send me :[%s] %s' %(ctime(), data.decode('utf8')) tcpClientSock.send(s.encode('utf8')) print([ctime()], ':', data.decode('utf8')) tcpClientSock.close() sock.close()
Client:
#-*- coding: utf-8 -*- from socket import * class TcpClient: HOST='127.0.0.1' PORT=12345 BUFSIZ=1024 ADDR=(HOST, PORT) def __init__(self): self.client=socket(AF_INET, SOCK_STREAM) self.client.connect(self.ADDR) while True: data=input('>') if not data: break self.client.send(data.encode('utf8')) data=self.client.recv(self.BUFSIZ) if not data: break print(data.decode('utf8')) if __name__ == '__main__': client=TcpClient()
上面的TCP方式有個問題,不能退出,好吧,我們改造一下,使這個程序可以發(fā)送quit命令以退出:
Server:
#-*- coding: utf-8 -*- from socket import * from time import ctime from time import localtime import time HOST='' PORT=1122 #設(shè)置偵聽端口 BUFSIZ=1024 ADDR=(HOST, PORT) sock=socket(AF_INET, SOCK_STREAM) sock.bind(ADDR) sock.listen(5) #設(shè)置退出條件 STOP_CHAT=False while not STOP_CHAT: print('等待接入,偵聽端口:%d' % (PORT)) tcpClientSock, addr=sock.accept() print('接受連接,客戶端地址:',addr) while True: try: data=tcpClientSock.recv(BUFSIZ) except: #print(e) tcpClientSock.close() break if not data: break #python3使用bytes,所以要進行編碼 #s='%s發(fā)送給我的信息是:[%s] %s' %(addr[0],ctime(), data.decode('utf8')) #對日期進行一下格式化 ISOTIMEFORMAT='%Y-%m-%d %X' stime=time.strftime(ISOTIMEFORMAT, localtime()) s='%s發(fā)送給我的信息是:%s' %(addr[0],data.decode('utf8')) tcpClientSock.send(s.encode('utf8')) print([stime], ':', data.decode('utf8')) #如果輸入quit(忽略大小寫),則程序退出 STOP_CHAT=(data.decode('utf8').upper()=="QUIT") if STOP_CHAT: break tcpClientSock.close() sock.close()
Client:
#-*- coding: utf-8 -*- from socket import * class TcpClient: #測試,連接本機 HOST='127.0.0.1' #設(shè)置偵聽端口 PORT=1122 BUFSIZ=1024 ADDR=(HOST, PORT) def __init__(self): self.client=socket(AF_INET, SOCK_STREAM) self.client.connect(self.ADDR) while True: data=input('>') if not data: break #python3傳遞的是bytes,所以要編碼 self.client.send(data.encode('utf8')) print('發(fā)送信息到%s:%s' %(self.HOST,data)) if data.upper()=="QUIT": break data=self.client.recv(self.BUFSIZ) if not data: break print('從%s收到信息:%s' %(self.HOST,data.decode('utf8'))) if __name__ == '__main__': client=TcpClient()
注:以上代碼為Python3。
總結(jié)
以上就是本文關(guān)于Python Socket使用實例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
- python利用socketserver實現(xiàn)并發(fā)套接字功能
- Python基于socket實現(xiàn)簡單的即時通訊功能示例
- Python簡單實現(xiàn)socket信息發(fā)送與監(jiān)聽功能示例
- python通過socket實現(xiàn)多個連接并實現(xiàn)ssh功能詳解
- Python探索之SocketServer詳解
- 基于python socketserver框架全面解析
- python Socket之客戶端和服務端握手詳解
- python多線程socket編程之多客戶端接入
- Python+Socket實現(xiàn)基于TCP協(xié)議的客戶與服務端中文自動回復聊天功能示例
- python的socket編程入門
相關(guān)文章
python實現(xiàn)漢諾塔遞歸算法經(jīng)典案例
這篇文章主要大家分享了python實現(xiàn)漢諾塔遞歸算法經(jīng)典案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-05-05Python數(shù)據(jù)分析之Numpy庫的使用詳解
NumPy(Numerical Python)是Python的一種開源的數(shù)值計算擴展。這種工具可用來存儲和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效的多(該結(jié)構(gòu)也可以用來表示矩陣(matrix)),支持大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學函數(shù)庫2021-11-11python面試題之read、readline和readlines的區(qū)別詳解
當python進行文件的讀取會遇到三個不同的函數(shù),它們分別是read(),readline(),和readlines(),下面這篇文章主要給大家介紹了關(guān)于python面試題之read、readline和readlines區(qū)別的相關(guān)資料,需要的朋友可以參考下2022-07-07