Python網(wǎng)絡(luò)編程 Python套接字編程
Python 提供了兩個(gè)級(jí)別訪問的網(wǎng)絡(luò)服務(wù)。
低級(jí)別的網(wǎng)絡(luò)服務(wù)支持基本的 Socket,它提供了標(biāo)準(zhǔn)的 BSD Sockets API,可以訪問底層操作系統(tǒng)Socket接口的全部方法。
高級(jí)別的網(wǎng)絡(luò)服務(wù)模塊 SocketServer, 它提供了服務(wù)器中心類,可以簡(jiǎn)化網(wǎng)絡(luò)服務(wù)器的開發(fā)。
什么是 Socket?
Socket又稱”套接字”,應(yīng)用程序通常通過”套接字”向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求,使主機(jī)間或者一臺(tái)計(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ù)端與客戶端的簡(jiǎn)單通信(模擬ssh的部分功能以及自動(dòng)應(yīng)答)
server端的簡(jiǎn)單程序示例:
#!/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 對(duì)象
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)
#接收到的客戶端的請(qǐng)求或者返回
if not data:
#當(dāng)返回信息為空或者請(qǐng)求為空時(shí)斷開客戶端連接
print('Connection closed!')
break;
data = data.decode('utf-8')
#以下前三個(gè)條件都是設(shè)置的自動(dòng)檢測(cè)應(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:
#對(duì)于命令的執(zhí)行如果沒有返回值的話就給客戶端發(fā)送一條信息
conn.send('No response'.encode('utf-8'))
continue
reply = cmd_res.encode('utf-8')
conn.send(reply)
#將結(jié)果發(fā)送給客戶端
client端的簡(jiǎn)單實(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 對(duì)象
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)行截圖

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(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套接字簡(jiǎn)單用法示例
- Python網(wǎng)絡(luò)編程之TCP與UDP協(xié)議套接字用法示例
- python利用socketserver實(shí)現(xiàn)并發(fā)套接字功能
- 詳解python3中socket套接字的編碼問題解決
- 淺析Python中的套接字編程
相關(guān)文章
Python實(shí)現(xiàn)掃描指定目錄下的子目錄及文件的方法
這篇文章主要介紹了Python實(shí)現(xiàn)掃描指定目錄下的子目錄及文件的方法,需要的朋友可以參考下2014-07-07
Python實(shí)現(xiàn)保證只能運(yùn)行一個(gè)腳本實(shí)例
這篇文章主要介紹了Python實(shí)現(xiàn)保證只能運(yùn)行一個(gè)腳本實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-06-06
教你使用Sublime text3搭建Python開發(fā)環(huán)境及常用插件安裝另分享Sublime text3最新激活注冊(cè)碼
這篇文章主要介紹了使用Sublime text 3搭建Python開發(fā)環(huán)境及常用插件安裝,并提供了最新Sublime text 3激活注冊(cè)碼需要的朋友可以參考下2020-11-11
關(guān)于pygame自定義窗口創(chuàng)建及相關(guān)操作指南
對(duì)于開發(fā)一個(gè)游戲來說,窗口的顯示肯定是前提中的前提,對(duì)于pygame來說,只需要一小段代碼就可以初始化窗口,下面這篇文章主要給大家介紹了關(guān)于pygame自定義窗口創(chuàng)建及相關(guān)操作的相關(guān)資料,需要的朋友可以參考下2022-07-07
使用python實(shí)現(xiàn)3D聚類圖示例代碼
這篇文章主要介紹了使用python實(shí)現(xiàn)3D聚類圖效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08
Python3實(shí)現(xiàn)轉(zhuǎn)換Image圖片格式
本篇文章給大家分享了Python3實(shí)現(xiàn)在線轉(zhuǎn)換Image圖片格式的功能以及相關(guān)實(shí)例代碼,有興趣的朋友參考下。2018-06-06
Python應(yīng)用之利用pyecharts畫中國地圖
這篇文章主要介紹了Python應(yīng)用之利用pyecharts畫中國地圖,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
Linux中安裝Python的交互式解釋器IPython的教程
IPython是一種基于Python的Shell,由于有了Python編程語言的支撐,而比一般的Shell更加強(qiáng)大.下面就來看一下Linux中安裝Python的交互式解釋器IPython的教程2016-06-06
在python tkinter界面中添加按鈕的實(shí)例
今天小編就為大家分享一篇在python tkinter界面中添加按鈕的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03

