zoukankan      html  css  js  c++  java
  • 路飞学城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
  • 相关阅读:
    Atitit 华为基本法 attilax读后感
    Atitit 华为管理者内训书系 以奋斗者为本 华为公司人力资源管理纲要 attilax读后感
    Atitit 项目版本管理gitflow 与 Forking的对比与使用
    Atitit 管理的模式扁平化管理 金字塔 直线型管理 垂直管理 水平管理 矩阵式管理 网状式样管理 多头管理 双头管理
    Atitit 乌合之众读后感attilax总结 与读后感结构规范总结
    深入理解 JavaScript 异步系列(4)—— Generator
    深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise
    深入理解 JavaScript 异步系列(2)—— jquery的解决方案
    深入理解 JavaScript 异步系列(1)——基础
    使用 github + jekyll 搭建个人博客
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/9370692.html
Copyright © 2011-2022 走看看