• 路飞学城Python-Day27(复习)


    简单的socket通信

    import socket
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('127.0.0.1', 8080))
    msg = input('>>>').strip()
    client.send(msg.encode('gbk'))
    res = client.recv(1024)
    print(res)
    client.close()
    客户端
    import socket
    sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sk.bind(('127.0.0.1', 8080))
    sk.listen(5)
    conn, addr = sk.accept()
    res = conn.recv(1024)
    conn.send(res.upper())
    conn.close()
    sk.close()
    服务端

    聊天版socket通信

    import socket
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('127.0.0.1', 8080))
    while True:
        msg = input('发送信息>>>').strip()
        client.send(msg.encode('gbk'))
        re = client.recv(1024)
        print('接收到的消息%s'%(re.decode('gbk')))
    聊天版客户端
    import socket
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    while True:
        conn,addr = server.accept()
        while True:
            try:
                msg = conn.recv(1024)
                print('接收到客户端的信息%s'%(msg.decode('gbk')))
                re = input('请回复信息>>>').strip()
                conn.send(re.encode('gbk'))
            except ConnectionResetError:
                pass
    聊天版服务端

    粘包版socket通信

    import socket
    import struct
    import pickle
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('127.0.0.1', 8080))
    while True:
        msg = input('请输入发送的消息>>>').strip()
        msg_dict = {
            'msg':msg
        }
        msg_p = pickle.dumps(msg_dict)
        client.send(struct.pack('i',len(msg_p)))
        res = pickle.loads(client.recv(1024))
        if res['confirm']:
            client.send(msg.encode('gbk'))
        else:
            pass
    粘包版客户端
    import socket
    import struct
    import pickle
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    while True:
        conn, addr = server.accept()
        while True:
            res = conn.recv(4)
            receive_bytes = struct.unpack('i',res)[0]
            if receive_bytes<1024:
                msg = {
                    'confirm': True,
                }
                msg_p = pickle.dumps(msg)
                conn.send(msg_p)
                res = conn.recv(1024)
                print(res.decode('gbk'))
            else:
                msg = {
                    'confirm':False,
                }
                msg_p = pickle.dumps(msg)
                conn.send(msg_p)
    粘包版服务端

     写一个异常

    try:
        int_number = int(input('请输入一个整数').strip())
        print(int_number)
    except Exception as e:
        print(e)
    写一个异常

    自定义异常

    class E(BaseException):
        def __init__(self):
            err = '发生异常了!'
            BaseException.__init__(self,err)
    raise E
    自定义异常

     windows系统版客户端和服务端

    import socket
    import pickle
    import struct
    import subprocess
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(('127.0.0.1', 8080))
    while True:
        command = input('请输入命令>>>').strip()
        msg_dict = {
            'msg':command
        }
        msg = pickle.dumps(msg_dict)
        client.send(struct.pack('i', len(msg)))
        res = client.recv(1024)
        if pickle.loads(res)['confirm']:
            client.send(command.encode('gbk'))
        #     解析长度
            res_len = client.recv(4)
            cmd_len = struct.unpack('i',res_len)[0]
        #       接收结果
            fin_res = client.recv(cmd_len).decode('gbk')
            print(fin_res)
        else:
            print('超出字符限制,请重试!')
    (系统命令版)客户端
    import socket
    import pickle
    import struct
    import subprocess
    # a=subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE)
    # print(a.stdout.read().decode('gbk'))
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    while True:
        conn, addr = server.accept()
        while True:
            try:
                res = conn.recv(4)
                res_bytes = struct.unpack('i',res)[0]
                if res_bytes<1024:
                    msg = {
                        'confirm':True,
                    }
                    conn.send(pickle.dumps(msg))
                    cmd = conn.recv(1024).decode('gbk')
                    cmd_res = subprocess.Popen(
                        cmd,
                        shell= True,
                        stdout= subprocess.PIPE,
                        stderr= subprocess.PIPE
                    )
                    res_cmd = cmd_res.stdout.read()
                #     发送长度
                    conn.send(struct.pack('i',len(res_cmd)))
                #     发送结果
                    conn.send(res_cmd)
                else:
                    msg = {
                        'confirm': False,
                    }
                    conn.send(pickle.dumps(msg))
    
            except Exception as e:
                print(e)
                break
    (系统命令版)服务端
    Win a contest, win a challenge
  • 相关阅读:
    项目打包发布到tomcat中,中文出现乱码
    打war包时无法把src/main/java里的xml文件打包上去
    Activemq和Rabbitmq端口冲突
    博客园皮肤炫酷效果
    centos7 ffmpeg安装
    centos7 nginx开启启动
    磁盘满了,找不到占磁盘的文件或者日志
    turn服务部署
    kvm虚拟机配置被克隆rhel6客户机的网卡
    jenkins自动构建
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/9370692.html
Copyright © 2020-2023  润新知