socket間通訊_TCP(用客戶端給執行服務端命令)
阿新 • • 發佈:2019-02-13
服務端:
import os
import socket
HOST = '172.25.254.41'
PORT = 9881
# 1. 建立服務端的socket物件
with socket.socket() as serverSocket:
# 2. 繫結一個ip和埠, 客戶端連線時的socket;
serverSocket.bind((HOST, PORT))
# 3. 一直監聽是否有客戶端連線
serverSocket.listen()
print("server is listening %d......." %(PORT))
# 4. 如果有客戶端連線, 接收客戶端的連線;
# serverSocket.accept會返回2個值, address指的是, 客戶端的ip和埠;
clientSocket, address = serverSocket.accept()
with clientSocket:
while True:
# 5. 客戶端和服務端進行通訊;
cmd = clientSocket.recv(1024).decode('utf-8') ##每次最多接受1024k
# 執行客戶端傳送的命令;
"""
執行linux命令:
1. 如果想獲取命令是否執行成功? os.systemc('cmd')
返回為0: 代表成功
返回為非0, 代表失敗;
2. 如果想獲取命令的執行結果,可以儲存到變數中 os.popen(cmd)
"""
if os.system(cmd) == 0:
resData = os.popen(cmd).read()
if resData:
resData = resData.encode('utf-8')
# 6. 給客戶端回覆訊息
clientSocket.send(resData)
else:
print("no response." )
else:
print("命令執行失敗!")
客戶端:
import socket
HOST = '172.25.254.41'
PORT = 9881
# 1.
with socket.socket() as clientSocket:
# 2. 連線遠端主機
clientSocket.connect((HOST, PORT))
# 3. 客戶端, 服務端通訊
# 給server主機發送訊息
while True:
cmd = input('client>>').encode('utf-8')
clientSocket.send(cmd)
# 接收服務端的響應(即服務端回覆的訊息)
recvData = clientSocket.recv(1024).decode('utf-8')
print("命令執行結果:", recvData)
服務端:
server is listening 9881…….
TCP_client.py
TCP_server.py
UDP_client.py
UPD_server.py
客戶端:
client>>ls
命令執行結果: TCP_client.py
TCP_server.py
UDP_client.py
UPD_server.py