python中socket编程
网络上的两个程序一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,建立网络通信连接至少一对端口号(socket)。
lsof -i:8888 查看占端口号的进程
subprocess
模拟shell命令
包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用
#用socket实现远程连接linux并查看
#服务器 import socket import subprocess import threading server = socket.socket() #创建套接字, server.bind(('', 8888)) #绑定套接字到默认本地IP与端口(双括号) server.listen(5) #开始监听连接 print('等待电话.....') conn, addr = server.accept() #响应一个连接请求 print('电话来了......') while True: data = conn.recv(1024) #接收传来的数据,最大为1024字节 cmd = subprocess.Popen(data.decode('utf-8'), #shell命令 shell=True, stdout=subprocess.PIPE, #PIPE管道 把输出塞到管道里 stderr=subprocess.PIPE) stdout = cmd.stdout.read() #正确输出 stderr = cmd.stdout.read() #错误输出 conn.send(stdout + stderr)
#客户端 import socket import threading client = socket.socket() #创建套接字 client.connect(('192.168.88.31', 9999)) #连接有远端地址 while True: info = input('===>:') if not info:continue client.send(info.encode('utf-8')) data = client.recv(10240) #每次最多接收1024字节 print(data.decode('utf-8'))
全双工电话
#服务器端 import socket import subprocess import threading server = socket.socket() server.bind(('', 9999)) server.listen(5) print('等待电话.....') conn, addr = server.accept() print('电话来了......') def recv(): while True: data = conn.recv(10240) print(data.decode('utf-8')) def send(): while True: data = input('===>:') conn.send(data.encode('utf-8')) t1 = threading.Thread(target=recv) t2 = threading.Thread(target=send) t1.start() t2.start()
#客户端 import socket import threading client = socket.socket() client.connect(('192.168.88.31', 9999)) def send(): while True: info = input('===>:') client.send(info.encode('utf-8')) def recv(): while True: data = client.recv(1024) print(data.decode('utf-8')) t1 = threading.Thread(target=send) t2 = threading.Thread(target=recv) t1.start() t2.start()