Python通訊端編程

來源:互聯網
上載者:User
這篇文章主要為大家詳細介紹了Python網路編程的相關資料,Python通訊端編程,具有一定的參考價值,感興趣的小夥伴們可以參考一下

Python 提供了兩個層級訪問的網路服務。

低層級的網路服務支援基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層作業系統Socket介面的全部方法。
進階別的網路服務模組 SocketServer, 它提供了伺服器中心類,可以簡化網路伺服器的開發。

什麼是 Socket?

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.pydate:9/8/17 3:43 PMauthor:lockeyemail:lockey@123.comdesc:socket編程伺服器端,python3.6.2'''import reimport socket,time,oss = 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!')   break; 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.pydate:9/8/17 3:43 PMauthor:lockeyemail:lockey@123.comdesc: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(result.decode('utf-8')) #如果服務端有返回則列印結果s.close()#使用者終止程式時關閉串連

伺服器端運行結果

用戶端運行

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.