• day27_网络编程


    day27
    面向对象多继承
    b. 经典类和新式类
                py2:
                    经典类
                    新式类,如果自己或自己的前辈只要有人继承object,那么此类就是新式类。
                py3:不管怎么写都是新式类
                    新式类
                
                经典类和新式类的查找成员的顺序不一样。
                    经典类,一条道走到黑(深度优先)。
                    新式类,C3算法实现(python )。(广度优先)
                            
                            Foo + (C,D,F,G) + (G,D,G,W) + (I,G,D,G,W)
                            
                            Foo, I,B,
                                获取第一个表头 和 其他表位进行比较
                                    不存在则拿走。
                                    如果存在,则放弃,然后获取第二个表的表头再次和其他表的表尾进行比较。
            
                简单:
                    经典类,一条道走到黑(深度优先)。
                    新式类,留个根(保留最后一个)。(科学C3算法);
                      
                    
                
                注意事项:
                    super是遵循__mro__执行顺序。 C3算法
    class F():
        pass            
    print(F,__mro__)  可以查看继承顺序-

    网络编程
     
    a. 软件
                客户端:CS架构, client  ->   server
                浏览器:BS架构, browser ->   server
     
    b. 如何实现相互通信。
                
                需求一:编写两个软件,软件之间相互通信。
                
                
                需求二:两个人直接连接 (网线)
                
                
                需求三:教室相互通信(交换机)
                        使用IP地址:ipconfig/ifconfig
                        
                       s1:192.168.13.155
                        s2:192.168.13.25
                        
                        
                        三亚女朋友:192.168.13.43  租公网IP
                            
                需求四:和三亚的女友通信(交换机+n*路由器)
                
                
                总结:
                    1. 相互通信本质发送 0101010101
                    2. 交换机作用
                    3. 通过ipconfig查看自己的内网IP
                    4. 公网IP,掏钱。

     
     
    import socket
    client = socket.socket()
    # 向服务端发起连接请求(递伞)
    # 阻塞,去连接,直到连接成功后才会继续向下走。
    client.connect(('192.168.13.155',8000))
     
    # # 链接上服务端后,向服务端发送消息
    client.send(b'hello')
     
    # 等待服务端给他发送消息
    data = client.recv(1024)
    print(data)
     
    # 关闭自己
    client.close()

    import socket
    # 创建服务端socket对象
    server = socket.socket()
     
    # 绑定IP和端口
    server.bind(('192.168.13.155',8000))
     
    # 后边可以等5个人
    server.listen(5)
     
    print('服务端准备开始接收客户端的连接')
    # 等待客户端来连接,如果没人来就傻傻的等待。
    # conn是客户端和服务端连接的对象(伞),服务端以后要通过该对象进行收发数据。
    # addr是客户端的地址信息。
    # #### 阻塞,只有有客户端进行连接,则获取客户端连接然后开始进行通信。
    conn,addr = server.accept()
     
    print('已经有人连接上了,客户端信息:',conn,addr)
     
    # 通过对象去获取(王晓东通过伞给我发送的消息)
    # 1024表示:服务端通过(伞)获取数据时,一次性最多拿1024字节。
    data = conn.recv(1024)
    print('已经有人发来消息了',data)
     
     
    # 服务端通过连接对象(伞)给客户端回复了一个消息。
    conn.send(b'stop')
     
    # 与客户端断开连接(放开那把伞)
    conn.close()
     
    # 关闭服务端的服务
    server.close()
     

        
    作业:
        1. 用户登录作业:
            1. 服务端
                - 等待客户端来发送数据:用户名、密码
                - 本地文件中查看用户名密码是否合法。
                - 合法:登录成功
                - 否则:用户名或密码错误
                
            2. 客户端
                - 用户输入:用户名、密码
                - 发送到服务端进行校验。
                
        2. 聊天工具(10086)
            1. 服务端
                - 接收客户端发送的信息。
                - 检查是否有某些指定关键字。
                    - 回复xx消息
                    - 回复xx消息
                    - 回复xx消息
                    - 回复xx消息
            
            2. 客户端
                - 持续
                    - 问答
                    - 关闭
                
                

    作业
    1. 整理本周知识点思维导图(可使用:xmind、MindManager或在线平台processon)
    2. 接口的作用?
    3. 抽象类和抽象方法的作用?
    4. 抽象类加抽象方法 和 接口的区别?
    5. python中应该如何约束派生类中指定的方法?
    6. 如何自定义异常?
    7. md5加密是否可以被反解?
    8. 为了防止撞库,md5加密时需要做什么操作并写代码实现。
    9. 程序为什么要写日志?
    10. 选课系统开发 系统登录需要有三类用户:学生、管理员、讲师,针对不用用户提供不
    同功能:
    学生用户 :对于学生用户来说,登陆之后有三个功能
    1、查看所有课程
    2、选择课程
    3、查看所选课程
    4、删除已选课程
    管理员用户:管理员用户除了可以做一些查看功能之外,还有很多创建工作。
    1、创建课程
    2、创建学生学生账号
    3、查看所有课程
    4、查看所有学生
    5、查看所有学生的选课情况
        
     
     
     
     
    # by luffycity.com
    
    import socket
    
    server = socket.socket()
    
    server.bind(('localhost',8001))
    
    server.listen(5)
    
    """  2. 聊天工具(10086)
            1. 服务端
                - 接收客户端发送的信息。
                - 检查是否有某些指定关键字。
                    - 回复xx消息
                    - 回复xx消息
                    - 回复xx消息
                    - 回复xx消息
            
            2. 客户端
                - 持续
                    - 问答
                    - 关闭"""
    
    while True:
        conn,addr = server.accept()
        # 字节类型
        data_dict={"天气":"晴朗","位置":"上海","公司":"迅联"}
        while True:
            data = conn.recv(1024).decode("utf-8") # 阻塞
            print(data)
            if data=="exit":
                break
            try:
                if data_dict[data]:
                    conn.send(data_dict[data].encode("utf-8"))
            except KeyError as e:
                conn.send("对不起,请你重新查询要查询的信息: ".encode("utf-8")+data.encode("utf-8"))
    
        conn.close()
    --------------
    # by luffycity.com
    
    
    import socket
    
    sk = socket.socket()
    
    sk.connect(('localhost',8001))
    
    while True:
        name = input("请输入查询的信息:")
        sk.send(name.encode('utf-8')) # 字节
        if name == 'exit':
            break
        response = sk.recv(1024) # 字节
        print(response.decode('utf-8'))
    
    sk.close()
    View Code
  • 相关阅读:
    linux中使用nfs共享文件
    kNN处理iris数据集-使用交叉验证方法确定最优 k 值
    概念学习-候选消除算法
    OCaml相关
    vmare连接远程服务器的问题
    unresolved external symbol boost::throw_exception
    记录C/C++中遇到的一些小问题
    Linux下修改IP、DNS、路由命令行设置
    VS调试IDAPython脚本
    Linux下mysql5.7数据库root登录的问题
  • 原文地址:https://www.cnblogs.com/pythonwork/p/11964056.html
Copyright © 2020-2023  润新知