• 2020python作业——scoket编程(一)


    @2020-4-20

    作业:
    1、编写远程执行命令的CS架构软件

    # 服务端
    
    # _*_coding:utf-8_*_
    
    __author__ = 'cc'
    
    from socket import *
    import subprocess
    
    ip_port = ('127.0.0.1', 1080)
    bufsize = 1024
    
    udp_server = socket(AF_INET, SOCK_DGRAM)
    udp_server.bind(ip_port)
    
    while True:
        # 收消息
        cmd, addr = udp_server.recvfrom(bufsize)
        print('用户命令----->', cmd)
    
        # 逻辑处理
        res = subprocess.Popen(cmd.decode('utf-8'), shell=True, stderr=subprocess.PIPE, stdin=subprocess.PIPE,
                               stdout=subprocess.PIPE)
        stderr = res.stderr.read()
        stdout = res.stdout.read()
    
        # 发消息
        udp_server.sendto(stderr, addr)
        udp_server.sendto(stdout, addr)
    udp_server.close()
    服务端
    # 客户端
    from socket import *
    
    ip_port = ('127.0.0.1', 1080)
    bufsize = 1024
    
    udp_client = socket(AF_INET, SOCK_DGRAM)
    
    while True:
        msg = input('>>: ').strip()
        udp_client.sendto(msg.encode('utf-8'), ip_port)
    
        data, addr = udp_client.recvfrom(bufsize)
        print(data.decode('utf-8'), end='')
    客户端

    2、加上通信循环与链接循环之后的tcp通信代码 

    #_*_coding:utf-8_*_
    __author__ = 'Linhaifeng'
    import socket
    ip_port=('127.0.0.1',8081)#电话卡
    BUFSIZE=1024
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #买手机
    s.bind(ip_port) #手机插卡
    s.listen(5)     #手机待机
    
    
    while True:                         #新增接收链接循环,可以不停的接电话
        conn,addr=s.accept()            #手机接电话
        # print(conn)
        # print(addr)
        print('接到来自%s的电话' %addr[0])
        while True:                         #新增通信循环,可以不断的通信,收发消息
            msg=conn.recv(BUFSIZE)             #听消息,听话
    
            # if len(msg) == 0:break        #如果不加,那么正在链接的客户端突然断开,recv便不再阻塞,死循环发生
    
            print(msg,type(msg))
    
            conn.send(msg.upper())          #发消息,说话
    
        conn.close()                    #挂电话
    
    s.close()                       #手机关机
    服务端-升级版
    #_*_coding:utf-8_*_
    __author__ = 'Linhaifeng'
    import socket
    ip_port=('127.0.0.1',8081)
    BUFSIZE=1024
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    s.connect_ex(ip_port)           #拨电话
    
    while True:                             #新增通信循环,客户端可以不断发收消息
        msg=input('>>: ').strip()
        if len(msg) == 0:continue
        s.send(msg.encode('utf-8'))         #发消息,说话(只能发送字节类型)
    
        feedback=s.recv(BUFSIZE)                           #收消息,听话
        print(feedback.decode('utf-8'))
    
    s.close()                                       #挂电话
    客户端-升级版
  • 相关阅读:
    14、java中的equals()和toString()方法
    13、java中的多态
    1、editplus中将选取向前移动
    《Java4Android视频教程》学习笔记(一)
    android 构建数据库SQLite
    SWOT自我分析
    函数传递是如何让HTTP服务器工作的
    Node.js模块
    Viewcontrol的生命周期
    iOS开发-用宏定义求2个数中的最大值
  • 原文地址:https://www.cnblogs.com/bigorangecc/p/12739783.html
Copyright © 2020-2023  润新知