練習 網路程式設計2

2022-08-27 03:21:12 字數 1552 閱讀 8384

用subprocess(子程序)模組完成遠端cmd操作

# 客戶端

importsocket

client =socket.socket()

client.connect(('127.0.0.1',8889))

whiletrue:

cmd = input('請傳送命令:').strip()

if len(cmd) ==0:

continue

if cmd == 'q':

client.send(b'q')

breakcmd = cmd.encode('utf-8')

client.send(cmd)

byte_data = client.recv(1024)

print(byte_data.decode('gbk'))

#

服務端import

socket

import

subprocess

server =socket.socket()

server.bind((

'127.0.0.1

',8889))

server.listen(5)

while

true:

conn,addr =server.accept()

while

true:

try:

cmd = conn.recv(1024)

if len(cmd) ==0:

continue

cmd = cmd.decode('

utf-8')

if cmd == '

q':break

obj = subprocess.popen(cmd,shell=true, stdout=subprocess.pipe, stderr=subprocess.pipe) #

這裡cmd必須是字串型別,不是bytes型別的字串

print(obj) #物件#

print(obj.stdout.read()) # b'' 沒賦值變數名返回的是空

success = obj.stdout.read() #

必須賦值乙個變數才有值

#print(success) # 返回的是二進位制,可以直接基於網路傳輸

#print(obj.stderr.read()) # b'' 沒賦值變數名返回的是空

error =obj.stderr.read()

#print(error) # 返回不正確命令的報錯資訊

ifsuccess:

conn.send(success)

else

: conn.send(error)

except exception as e: #

捕獲客服端人為斷開連線,不至於服務端報錯率而斷開,畢竟服務端是24h不間斷服務的

print

(e)

break

conn.close()

網路程式設計練習

題目 客戶端和服務端連線,且任一方可以中斷連線 服務端 import socket sk socket.socket 預設引數 使用基於網路型別的套接字,tcp協議 sk.bind 127.0.0.1 65534 回環位址,就是自己這台機器,這樣寫的話別的電腦就找不到你 sk.listen conn...

程式設計練習(2)

鍊錶的回文結構 給定乙個鍊錶的頭指標a,請返回乙個 bool 值,代表其是否為回文結構。保證鍊錶長度小於等於 900。測試樣例 1 2 2 1 返回 true struct listnode class palindromelist right left next while right next ...

Java 網路程式設計 練習

inetaddress類使用 1,返回本地主機 inetaddress locahhost inetaddress.getlocalhost system.out println 本地主機為 locahhost 2,獲取此 ip 位址的主機名。string hostname locahhost.ge...