Python網(wǎng)絡(luò)編程 Python套接字編程
Python 提供了兩個(gè)級別訪問的網(wǎng)絡(luò)服務(wù)。
低級別的網(wǎng)絡(luò)服務(wù)支持基本的 Socket,它提供了標(biāo)準(zhǔn)的 BSD Sockets API,可以訪問底層操作系統(tǒng)Socket接口的全部方法。
高級別的網(wǎng)絡(luò)服務(wù)模塊 SocketServer, 它提供了服務(wù)器中心類,可以簡化網(wǎng)絡(luò)服務(wù)器的開發(fā)。
什么是 Socket?
Socket又稱”套接字”,應(yīng)用程序通常通過”套接字”向網(wǎng)絡(luò)發(fā)出請求或者應(yīng)答網(wǎng)絡(luò)請求,使主機(jī)間或者一臺計(jì)算機(jī)上的進(jìn)程間可以通訊。
socket()函數(shù)
Python 中,我們用 socket()函數(shù)來創(chuàng)建套接字,語法格式如下:
socket.socket([family[, type[, proto]]])
參數(shù)
family: 套接字家族可以使AF_UNIX或者AF_INET
type: 套接字類型可以根據(jù)是面向連接的還是非連接分為SOCK_STREAM或SOCK_DGRAM
protocol: 一般不填默認(rèn)為0.
socket實(shí)現(xiàn)服務(wù)端與客戶端的簡單通信(模擬ssh的部分功能以及自動(dòng)應(yīng)答)
server端的簡單程序示例:
#!/usr/bin/env python #coding:utf-8 ''' file:server.py date:9/8/17 3:43 PM author:lockey email:lockey@123.com desc:socket編程服務(wù)器端,python3.6.2 ''' import re import socket,time,os s = socket.socket() # 創(chuàng)建 socket 對象 host = '127.0.0.1'#socket.gethostname() # 獲取本地主機(jī)名 port = 9999 # 設(shè)置端口 s.bind((host, port)) # 綁定端口 s.listen(5) # 等待客戶端連接 while True: conn, addr = s.accept() # 建立客戶端連接。 print('conneted address:'.decode('utf-8'), addr)#顯示連接到服務(wù)器的客戶端的地址 while True: data = conn.recv(1024) #接收到的客戶端的請求或者返回 if not data: #當(dāng)返回信息為空或者請求為空時(shí)斷開客戶端連接 print('Connection closed!') break; data = data.decode('utf-8') #以下前三個(gè)條件都是設(shè)置的自動(dòng)檢測應(yīng)答,最后一個(gè)是根據(jù)輸入的內(nèi)容進(jìn)行的命令執(zhí)行,并將結(jié)果返回給客戶端 if re.findall(r'who',data): reply = 'I am lockey'.encode('utf-8') elif re.findall(r'gender',data): reply = 'A boy'.encode('utf-8') elif re.findall(r'age',data): reply = '23'.encode('utf-8') else: print('execute com:',data) cmd_res = os.popen(data).read() if not cmd_res: #對于命令的執(zhí)行如果沒有返回值的話就給客戶端發(fā)送一條信息 conn.send('No response'.encode('utf-8')) continue reply = cmd_res.encode('utf-8') conn.send(reply) #將結(jié)果發(fā)送給客戶端
client端的簡單實(shí)現(xiàn):
#!/usr/bin/env python #coding:utf-8 ''' file:client.py date:9/8/17 3:43 PM author:lockey email:lockey@123.com desc:socket編程客戶端,python3.6.2 ''' import socket,time # 導(dǎo)入 socket 模塊 s = socket.socket() # 創(chuàng)建 socket 對象 host = '127.0.0.1'#socket.gethostname() # 獲取本地主機(jī)名 port = 9999 # 設(shè)置端口好 s.connect((host, port)) while True: cmd = input("lockey#") #用戶輸入 if len(cmd) == 0:continue #如果用戶未輸入內(nèi)容則繼續(xù)下一次輸入 s.send(cmd.encode('utf-8')) #將用戶輸入的內(nèi)容發(fā)送給客戶端等待結(jié)果 result = s.recv(1024) if not result: #如果服務(wù)端沒有返回結(jié)果則繼續(xù)下一次輸入 continue print(result.decode('utf-8')) #如果服務(wù)端有返回則打印結(jié)果 s.close() #用戶終止程序時(shí)關(guān)閉連接
服務(wù)器端運(yùn)行結(jié)果
客戶端運(yùn)行截圖
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python 網(wǎng)絡(luò)編程之UDP發(fā)送接收數(shù)據(jù)功能示例【基于socket套接字】
- Python socket 套接字實(shí)現(xiàn)通信詳解
- python使用原始套接字發(fā)送二層包(鏈路層幀)的方法
- python 基于TCP協(xié)議的套接字編程詳解
- Python socket套接字實(shí)現(xiàn)C/S模式遠(yuǎn)程命令執(zhí)行功能案例
- Python網(wǎng)絡(luò)編程之TCP套接字簡單用法示例
- Python網(wǎng)絡(luò)編程之TCP與UDP協(xié)議套接字用法示例
- python利用socketserver實(shí)現(xiàn)并發(fā)套接字功能
- 詳解python3中socket套接字的編碼問題解決
- 淺析Python中的套接字編程
相關(guān)文章
非常詳細(xì)的Django連接mysql數(shù)據(jù)庫步驟記錄
我的Mysql中已經(jīng)有了項(xiàng)目需要使用的相關(guān)數(shù)據(jù)庫,現(xiàn)在需要通過django來獲取Mysql里的數(shù)據(jù)并使用,下面這篇文章主要給大家介紹了關(guān)于非常詳細(xì)的Django連接mysql數(shù)據(jù)庫步驟,需要的朋友可以參考下2022-10-10一步步教你用python給女朋友寫個(gè)微信自動(dòng)提醒的程序
如今微信已成為我們?nèi)粘I畹闹饕涣鞴ぞ?但是微信自身的功能有時(shí)候可能并不能滿足我們的需要,因此我們會(huì)想是否可以進(jìn)行微信功能的拓展呢,這篇文章主要給大家介紹了關(guān)于利用python給女朋友寫了個(gè)微信自動(dòng)提醒程序的相關(guān)資料,需要的朋友可以參考下2021-10-10pytorch實(shí)現(xiàn)多項(xiàng)式回歸
這篇文章主要為大家詳細(xì)介紹了pytorch實(shí)現(xiàn)多項(xiàng)式回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04python實(shí)現(xiàn)在多維數(shù)組中挑選符合條件的全部元素
今天小編就為大家分享一篇python實(shí)現(xiàn)在多維數(shù)組中挑選符合條件的全部元素,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11Python實(shí)現(xiàn)簡單線性插值去馬賽克算法代碼示例
去馬賽克是圖像處理中的一項(xiàng)技術(shù),用于從單色彩濾光片陣列(CFA)圖像恢復(fù)全彩圖像,本文介紹了一種基于簡單線性插值的去馬賽克算法,并展示了如何將MATLAB代碼轉(zhuǎn)換為Python代碼,需要的朋友可以參考下2024-10-10Python機(jī)器學(xué)習(xí)算法之k均值聚類(k-means)
這篇文章主要為大家詳細(xì)介紹了Python機(jī)器學(xué)習(xí)算法之k均值聚類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02pytorch下大型數(shù)據(jù)集(大型圖片)的導(dǎo)入方式
今天小編就為大家分享一篇pytorch下大型數(shù)據(jù)集(大型圖片)的導(dǎo)入方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01