您好,登錄后才能下訂單哦!
#Author Kang
import os
import subprocess
import socket
server = socket.socket()
server.bind(('localhost',9999))
server.listen()
print("等待客戶端連接:>>>>")
while True:
conn,addr = server.accept()
print("接受了一個新的鏈接!!")
while True:
data = conn.recv(1024)
cmd = subprocess.getstatusoutput(data.decode())
print("執行命令:>>",cmd)
res_size = str(len(cmd[1].encode("utf-8")))
print(res_size)
if len(cmd[1]) != 0:
conn.send(res_size.encode("utf-8"))
ack = conn.recv(1024) #解決SOCKET粘包的問題,即發送命令結果大小與命令結果同時發送
conn.send(cmd[1].encode("utf-8"))
elif cmd[0] == 0 and len(cmd[1]) == 0:
res = '命令執行成功,但沒有返回值'
conn.send(res_size.encode("utf-8"))
ack = conn.recv(1024) # 解決SOCKET粘包的問題
conn.send(res.encode("utf-8"))
if len(data) == 0:
break
server.close()
#Author Kang
import socket
client = socket.socket()
client.connect(('localhost',9999))
while True:
msg = input("請輸入你要傳遞的信息:>>>>>")
if len(msg) == 0:
continue
client.send(msg.encode("utf-8")) #發送命令給服務器端
cmd_size = client.recv(1024) #接受服務器返回結果的長度
print("接受結果的大小為:",cmd_size.decode())
recv_size = 0
res_data = ""
client.send("我已經可以可以接受了".encode("utf-8")) #為了解決粘包的問題,返回我已經接送命令返回的大小,開始接受結果
while recv_size < int(cmd_size): #判斷當前接受的大小與服務器執行命令大小,如小于繼續接受
data = client.recv(1024)
recv_size += len(data)
res_data += data.decode()
else:
print(res_data)
client.close()
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。