Python網路程式設計 Python套接字程式設計

2022-10-04 11:42:13 字數 2803 閱讀 9079

python 提供了兩程式設計客棧個級別訪問的網路服務。

低階別的網路服務支援基本的 socket,它提供了標準的 bsd sockets api,可以訪問底層作業系統socket介面的全部方法。

高階別的網路服務模組 socketserver, 它提供了伺服器中心類,可以簡化網路伺服器的開發。

什麼是 socket?

又稱」套接字」,應用程式通常通過」套接字」向網路發出請求或者應答網路請求,使主機間或者一台計算機上的程序間可以通訊。

socket()函式

python 中,我們用 socket()函式來建立套接字,語法格式如下:

socket.socket([family[, type[, proto]]])

引數family: 套接字家族可以使af_unix或者af_inet

type: 套接字型別可以根據是面向連線的還是非連線分為sock_stream或sock_dgram

protocol: 一般不填預設為0.

socket實現服務端與客戶端的簡單通訊(模擬ssh的部分功能以及自動應答)

server端的簡單程式示例:

#!/usr/bin/env python

#coding:utf-8

'''file:server.py

date:9/8/17 3:43 pm

author:lockey

email:[email protected]

desc:socket程式設計伺服器端,python3.6.2

'''import re

import socket,time,os

s = socket.socket() # 建立 socket 物件

host = '127.0.0.1'#socket.gethostname() # 獲取本地主機名

port = 9999 # 設定埠

s.bind((host, port)) # 繫結埠

s.listen(5) # 等待客戶端連線

while true:

conn, addr = s.accept() # 建立客戶端連線。

print('conneted address:'.decode('utf-8'), addr)#顯示連線到伺服器的客戶端的位址

while true:

data = conn.recv(1024)

#接收到的客戶端的請求或者返回

if not data:

#當返回資訊為空或者請求為空時斷開客戶端連線

print('connection closed!')

br程式設計客棧eak;

data = data.decode('utf-8')

#以下前三個條件都是設定的自動檢測應答,最後乙個是根據輸入的內容進行的命令執行,並將結果返回給客戶端

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:

#對於命令的執行如果沒有返回值的話就給客戶端傳送一條資訊

conn.send('no response'.encode('utf-8'))

continue

reply = cmd_res.encode('utf-8')

conn.send(reply)

#將結果傳送給客戶端

client端的簡單實現:

#!/usr/bin/env python

#coding:utf-8

'''file:client.py

date:9/8/17 3:43 pm

author:lockey

email:[email protected]

desc:socket程式設計客戶端,python3.6.2

'''import socket,time # 匯入 socket 模組

s = socket.socket() # 建立 socket 物件

host = '127.0.0.1'#socket.gethostname() # 獲取本地主機名

port = 9999 # 設定埠好

s.connect((host, port))

while true:

cmd = input("lockey#")

#使用者輸入

if len(cmd) == 0:continue

#如果使用者未輸入內容則繼續下一次輸入

s.send(cmd.encode('utf-8'))

#將使用者輸入的內容傳送給客戶端等待結果

result = s.recv(1024)

if not result:

#如果服務端沒有返回結果則繼續下一次輸入

continue

print(resqueffpfntfult.decode('utf-8'))

#如果服務端有返回則列印結果

s.close()

#使用者終止程式時關閉連線

伺服器端執行結果

客戶端執行截圖

本文標題: python網路程式設計 python套接字程式設計

本文位址:

python是高階動態程式語言 Python語言

python是一門跨平台 開源 免費的解釋型高階動態程式語言。python支援命令式程式設計 how to do 函式式程式設計 what to do 完全支援物件導向程式設計,擁有大量擴充套件庫。膠水語言 可以把多種不同語言編寫的程式融合到一起實現無縫拼接,更好地發揮不同語言和工具的優勢,滿足不同...

python網路程式設計 TCP網路程式設計

tcp程式設計 客戶端 import socket 1 套接字 tcp socket socket.socket socket.af inet,socket.sock stream 2 建立鏈結 tcp socket.connect 172.27.35.1 8080 3 傳送資訊 tcp socke...

python 網路程式設計

今天晚上學習了一下python的網路程式設計,實現了client向server傳送資料,server反饋資訊 python 3.3 版本 server from socket import class tcpserver object def init self,serverport self.se...