這段時間都在學習Python。感覺已經喜歡上這門語言了。這段時間練習了socket的網絡程式設計。socket感覺是很強大的東西,可以實作ssh程式、ftp程式。還有類似QQ的時時通信語言:下面就是一個簡單的ssh程式例子:
1、在寫這個程式之前我們先來了解一下socket的工作過程:如下圖所示:
<a href="http://s3.51cto.com/wyfs02/M02/57/2A/wKioL1STmjjAAP74AAGSpqXMYl0723.jpg" target="_blank"></a>
一、服務端綁定一個端口号、并處于監聽狀态。用accept()接收發來的資料請求:
二、用戶端通過位址和端口号連接配接服務端,并發送資料請求。
三、服務端收到後,處理請求,并發請求發給用戶端。如何用戶端還在連接配接請求,那麼就循環操作。
四、用戶端處理完資料之後,發送關閉請求,服務端收到請求後也開始關閉連接配接。
實驗過程:(直接貼代碼)
伺服器端代碼:
#!/usr/bin/python
import socket
import os
import time #導入下面要用到的子產品
HOST = '' #空和4個0表示,監聽所有的位址
PORT = 11111 #開啟11111端口号,確定這個端口号系統還沒有開啟
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #指定傳輸的資料類型和結構。一般固定這個
s.bind((HOST,PORT)) #綁定上面變量的位址和端口号。
s.listen(2) #端口監聽狀态
conn,addr = s.accept() #定義接收到的連接配接和addr位址變量
#########-----------------
print 'Got client from:',addr #列印通路的ip位址和端口有助于排錯
while True: #寫一個循環,不寫循環資料一次就關閉了
data = conn.recv(4096) #定義接收到的資料大小
print 'get data',data #列印接收到的資料名稱(幫助排錯)
if not data:
time.sleep(3) #寫個if判斷接入接收不到語句。那麼列印輸出間隔輸出,不讓花屏
cmd = os.popen(data) #定義一個變量cmd把收到的結果,用os.執行,因為我們是ssh用戶端
result=cmd.read() #把執行結果列印出來并付給變量result
conn.sendall(result) #把執行結果sendall的方式傳回去
conn.close()
用戶端代碼:
#/usr/bin/env python
from time import sleep
h = '192.168.63.129'
p = 111111
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((h,p))
while True:
INPUT = raw_input("please input your Command:")
if len(INPUT) ==0:
print "your must input your command:"
continue
else:
pass
s.send(INPUT) #把輸入的結果傳給伺服器
received_data = s.recv(1024) #定義接收的資料
print "received_data from server:\n" ,received_data #列印接收的資料
sleep(1)
s.close()
先啟動伺服器端,然後看端口是否已經開啟。然後運作用戶端代碼:效果如下圖所示:
用戶端:
<a href="http://s3.51cto.com/wyfs02/M02/57/2B/wKioL1SToWiQMuBNAAHYMiebC0I308.jpg" target="_blank"></a>
伺服器端:
<a href="http://s3.51cto.com/wyfs02/M00/57/2B/wKioL1STobfSfwJnAABwtcKyxSY600.jpg" target="_blank"></a>
本文轉自 小羅ge11 51CTO部落格,原文連結:http://blog.51cto.com/xiaoluoge/1591677,如需轉載請自行聯系原作者