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()
原文地址:https://www.cnblogs.com/heiguu/p/10057023.html