import subprocess sub_obj = subprocess.Popen( 'dir', # 系統指令:'dir','ipconfig'.等 shell=True, # 使用shell,就至關於使用cmd窗口 stdout=subprocess.PIPE, # 標準輸出PIPE管道,保存着指令的執行結果 stderr=subprocess.PIPE # 標準錯誤輸出 ) print('正確輸出',sub_obj.stdout.read().decode('gbk')) print('錯誤輸出',sub_obj.stderr.read().decode('gbk'))
from socket import * ip_port=('127.0.0.1',8080) tcp_socket_server=socket(AF_INET,SOCK_STREAM) tcp_socket_server.bind(ip_port) tcp_socket_server.listen(5) conn, addr = tcp_socket_server.accept() # 服務端連續接受兩個信息 data1 = conn.recv(10) data2 = conn.recv(10) print('----->',data1.decode('utf-8')) print('----->',data2.decode('utf-8')) conn.close
1 import socket 2 BUFSIZE=1024 3 ip_port=('127.0.0.1',8080) 4 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 5 res=s.connect(ip_port) 6 7 s.send('hello'.encode('utf-8')) 8 s.send('sigui'.encode('utf-8'))
結果:python
-----> hellosigui ----->
1 import socket 2 import subprocess 3 server = socket.socket() 4 ip_port = ('127.0.0.1',8010) 5 server.bind(ip_port) 6 server.listen() 7 conn,addr = server.accept() 8 9 while 1: 10 from_client_cmd = conn.recv(1024) 11 print(from_client_cmd.decode('utf-8')) 12 sub_obj = subprocess.Popen( 13 from_client_cmd.decode('utf-8'), 14 shell=True, 15 stdout=subprocess.PIPE, 16 stderr=subprocess.PIPE 17 ) 18 std_msg = sub_obj.stdout.read() 19 print('指令執行的長度>>>',len(std_msg)) 20 conn.send(std_msg)
1 import socket 2 3 client = socket.socket() 4 client.connect(('127.0.0.1',8010)) 5 6 while 1: 7 cmd = input('請輸入指令:') 8 client.send(cmd.encode('utf-8')) 9 server_cmd_result = client.recv(1025) 10 print(server_cmd_result.decode('gbk'))
1 import socket 2 import subprocess 3 # 建立socket對象 4 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 5 server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 地址重用 6 # 設置IP地址和端口號 7 ip_port = ('127.0.0.1',8080) 8 # 綁定IP地址和端口號 9 server.bind(ip_port) 10 # 監聽IP地址和端口號 11 server.listen() 12 # 等待創建鏈接,conn是鏈接通道,addr是客戶端地址 13 conn,addr = server.accept() 14 15 while 1: 16 from_client_cmd = conn.recv(1024) 17 print(from_client_cmd.decode('utf-8')) 18 # 接收到客戶端發送的指令,服務端經過subprocess模塊到服務器本身的系統執行這條指令 19 sub_obj = subprocess.Popen( 20 from_client_cmd.decode('utf-8'), 21 shell=True, 22 stdout=subprocess.PIPE, 23 stderr=subprocess.PIPE 24 ) 25 # 從管道中拿出結果,經過subprocess.Popen的實例化對象.stdout.read()方法來獲取管道中的結果 26 std_msg = sub_obj.stdout.read() 27 # 爲了解決黏包的現象,咱們統計了一下消息的長度,先將消息長度發給客戶端,客戶端經過這個長度來接收後面服務端要發送的真實數據 28 std_msg_len = len(std_msg) 29 # 首先將數據長度的數據類型轉化爲bytes類型 30 std_bytes_len = str(len(std_msg)).encode('utf-8') 31 print('指令的執行結果長度>>>',len(std_msg)) 32 conn.send(std_bytes_len) 33 34 status = conn.recv(1024) 35 if status.decode('utf-8') == 'ok': 36 conn.send(std_msg) 37 else: 38 pass
1 import socket 2 3 client = socket.socket() 4 client.connect(('127.0.0.1',8080)) 5 6 while 1: 7 cmd = input('請輸入指令:') 8 client.send(cmd.encode('utf-8')) 9 server_res_len = client.recv(1024).decode('utf-8') 10 print('來自服務端的消息長度:',server_res_len) 11 client.send(b'ok') 12 server_cmd_result = client.recv(int(server_res_len)) 13 print(server_cmd_result.decode('gbk'))
import struct num = 100 # num太大的話會報錯, # struct.error: 'i' format requires -2147483648 <= number <= 2147483647 #這個是範圍 # 打包,將int類型的數據打包成4個長度的bytes類型的數據 byt = struct.pack('i',num) print(byt) # 解包,將bytes類型的數據,轉換爲對應的那個int類型的數據 # 注:unpack返回的是truple int_num = struct.unpack('i',byt)[0] print(int_num)
1 import socket 2 import subprocess 3 import struct 4 5 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 6 server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 地址重用 7 ip_port = ('127.0.0.1',8090) 8 9 server.bind(ip_port) 10 server.listen() 11 conn,addr = server.accept() 12 13 while 1: 14 from_client_cmd = conn.recv(1024) 15 16 print(from_client_cmd.decode('utf-8')) 17 # 接收到客戶端發送來的系統指令,服務端經過subprocess模塊到服務端本身的系統裏只能怪這條指令 18 sub_obj = subprocess.Popen( 19 from_client_cmd.decode('utf-8'), 20 shell=True, 21 stdout=subprocess.PIPE, # 正確的結果存放位置 22 stderr=subprocess.PIPE # 錯誤結果的存放位置 23 ) 24 # 從管道中拿出結果,經過subproess.Popen的實例化對象.stdout.read()方法來獲取管道中的結果 25 std_msg = sub_obj.stdout.read() 26 # 爲了解決黏包的現象,首先統計一下消息的長度,先將消息的長度發給客戶端,客戶端銅鼓這個長度來接收後面服務端發送的真實數據 27 std_msg_len = len(std_msg) 28 print('指令的執行長度>>>',len(std_msg)) 29 msg_lenint_struct = struct.pack('i',std_msg_len) 30 conn.send(msg_lenint_struct+std_msg)
1 import socket 2 import struct 3 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 4 client.connect(('127.0.0.1',8090)) 5 6 while 1: 7 cmd = input('請輸入指令:') 8 # 發送指令 9 client.send(cmd.encode('utf-8')) 10 # 接收數據長度,首先接收4個字節長度的數據,由於這四個字節是後面數據的長度 11 server_res_len = client.recv(4) 12 msg_len = struct.unpack('i',server_res_len)[0] 13 14 print('來自服務端的消息長度',msg_len) 15 # 經過解包出來的長度,來接收後面的真實數據 16 server_cmd_result = client.recv(msg_len) 17 print(server_cmd_result.decode('gbk'))