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
原文地址:https://www.cnblogs.com/pythonwork/p/11964056.html