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()
  • 相关阅读:
    构建WCF的消息代理
    使用LINQPad调试Linq和Entity Framework
    Memcached快递上手之C#
    使用PDFBox提取PDF文件中文本
    Asp.net使用HttpHandler优化Css样式文件
    Asp.net使用JQuery实现放大图片效果
    在Asp.net应用程序中构建基于WCF Web.Api的服务
    MsTest中实现类似NUnit中Assert.Throws
    JVM栈帧之局部变量表
    Tomcat源码分析(六)日志记录器和国际化
  • 原文地址:https://www.cnblogs.com/heiguu/p/10057023.html
Copyright © 2011-2022 走看看