server.py
#socket 基於tcp實現遠端執行命令
from socket import *
import
subprocess
ip_port = ('
127.0.0.1
', 8080)
back_log = 5buffer_size = 1024tcp_server =socket(af_inet, sock_stream)
tcp_server.bind(ip_port)
tcp_server.listen(back_log)
while
true:
conn, addr =tcp_server.accept()
while
true:
try:
cmd =conn.recv(buffer_size)
ifnot cmd: break
cmd = cmd.decode('
utf-8')
print('
收到客戶端命令
', cmd)
res = subprocess.popen(cmd, shell=true, #
第乙個引數:命令字串,第二個引數指定由shell處理
stderr=subprocess.pipe, #
將基本的輸入、輸出及錯誤都放入管道
stdin=subprocess.pipe, #
這些在管道裡的資訊都是位元組形式,編碼為utf-8
stdout=subprocess.pipe
)err = res.stderr.read() #
定義乙個err變數接收基本的錯誤資訊
if err: #
如果錯誤資訊不為空
cmd_res = err #
輸出的結果為基本的錯誤資訊
else
: cmd_res = res.stdout.read() #
輸出的結果為基本的輸出資訊
ifnot cmd_res: #
有些命令無返回結果,需要進行判斷
cmd_res = '
該命令沒有返回結果
'.encode('
gbk'
) conn.send(cmd_res)
#向客戶端傳送執行的結果
except
exception:
break
conn.close()
tcp_server.close()
client.py
from socket import *ip_port = ('127.0.0.1
', 8080)
tcp_client =socket(af_inet, sock_stream)
tcp_client.connect(ip_port)
while
true:
cmd = input('
請輸入命令
').strip()
ifnot cmd: continue
if cmd == '
quit
': break
cmd = cmd.encode('
utf-8')
tcp_client.send(cmd)
cmd_res = tcp_client.recv(1024) #
這裡會有粘包現象產生
print('
命令執行的結果是
', cmd_res.decode('
gbk')) #
windows系統預設編碼為gbk
基於tcp實現遠端執行命令
1 author kelvin2 date 2019 1 30 20 10 3from socket import 4import subprocess 56 ip conf 127.0.0.1 8888 7 buffer capacity 1024 8 tcp server socket af i...
程式設計實現基於tcp的socket程式設計
server端 public class server socket.shutdowninput 關閉輸入流 4 獲取輸出流,響應客戶端的請求 outputstream os socket.getoutputstream printwriter pw new printwriter os 包裝為列印...
基於TCP的socket程式設計
sockets 套接字 程式設計有三種,流式套接字 sock stream 資料報套接字 sock dgram 原始套接字 sock raw 基於 tcp的 socket 程式設計是採用的流式套接字。在這個程式中,將兩個工程新增到乙個工作區。要鏈結乙個 ws2 32.lib 的庫檔案。伺服器端程式設...