天天看點

python soket程式設計之一個ssh程式

    這段時間都在學習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,如需轉載請自行聯系原作者