zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    【FIRST USE】第一次用git把代码上传到github
    [多线程学习笔记] 一个线程安全的队列
    C中宏展开问题
    C语言中的命名空间
    c语言中赋值语句的结果
    Python一些难以察觉的错误
    C语言中的内存压缩技术
    简述数据结构:二叉查找树
    指针与指针的引用、指针的指针
    C++ 中的virtual关键词
  • 原文地址:https://www.cnblogs.com/heiguu/p/10057023.html
Copyright © 2011-2022 走看看