用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不間斷服務的
(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...