异常处理与网络基础中的tcp,udp协议

# 异常处理:
# 什么是异常?异常和错误的区别
    # Error  语法错误   比较明显的错误 在编译代码阶段就能检测出来
    # Iteration 异常  在执行代码的过程中引发的异常
# 异常发生之后的效果
    # 一旦在程序中发生异常,程序就不再继续执行了
# try:
#     # name
#     [][3]
# except NameError:
#     print("请设置好变量!!")
# except IndexError:  #分支异常处理
#     print('请认真!!')
# # except Exception as e:#万能异常,常常放在分支异常后面
# #     print(e,type(e))
# else:
#     print(666)#只有不出现错误才会执行,若执行成功except,不执行else
# finally:
#     print(777)#不管出没出现错误,finally都会执行

# 自定义异常
# raise NameError('这是一个name error的异常')
# class EvaException(Exception):
#     def __init__(self,msg):
#         self.msg = msg
#
# raise EvaException('这是一个什么什么错误,有什么问题')

# 使用异常处理的注意事项
# 断言 assert raise 主动抛异常
# 异常处理(一般少用异常处理)
    # try/except
    # try/except/else
    # try/except/else/finally
    # try/except/finally
    # try/finally

# collections模块
# 数据类型的扩展模块
# import queue
# q = queue.Queue()
# print(q.qsize())
# q.put(1)
# q.put('a')
# q.put((1,2,3))
# q.put(({'k':'v'}))
# print(q.qsize())
# print('q : ',q)
# print('get : ',q.get())
# print(q.qsize())

# deque 双端队列
# from collections import deque
# dq = deque()
# dq.append(2)
# dq.append(5)
# dq.appendleft('a')
# dq.appendleft('b')
# print(dq)
# # print(dq.pop())
# # print(dq)
# # print(dq.popleft())
# # print(dq)
# print(dq.remove('a'))
# print(dq.insert(2,'123'))
# print(dq)


# 网络基础:
# (1)架构:C/S架构,client客户端和server服务器端,优势在于充分发挥pc机的性能;
# B/S架构,browers浏览器和server服务器端,统一了应用的接口
# 1  mac地址 : 是一个物理地址,全球唯一,  类似于身份证
# 2  ip地址:    是一个四位点分十进制,它标识了计算机在网络中的位置.类似于 学号
# 3  交换机的通信方式:
#          广播 : 吼一嗓子
#          单播 : 一对一
#          组播 : 一对多
#  4  arp协议 :  通过目标ip地址获取目标mac地址的一个协议.
#  5  端口 : 操作系统为本机上每一个运行的程序都随机分配一个端口,其他电脑上的程序可以通过端口获取到这个程序
#       ip地址 + 端口 能唯一找到某台电脑上的某一个服务程序
#  6  路由器 : 连接不同网段 , 路由
#  7  网关   : 类似于一个局域网的出口和入口
#  8  网段   : 一个局域网内的ip地址范围
#  9  子网掩码 : 子网掩码 &  ip地址  得到网段
#  10  osi 五层模型:
        # 应用层       :  http,https,ftp
        # 传输层       :  tcp / udp          四层交换机  四层路由器
        # 网络层       :  ip协议            路由器  三层交换机
        # 数据链路层   :  arp协议           以太网交换机  网卡  网桥
        # 物理层       :  传输电信号        集线器  网线   光纤
# (2).socket模块
# 这是一个新的模块
# import socket
#
# socket
# 又叫做套接字
# 有很多种类型, 但是咱们只需要知道两种就可以了
# sk = socket.socket(family=AF_INET, type=SOCK_STREAM)
# family:
# 一种: AF_UNIX基于文件类型的套接字(早期socket是源自于unix系统而研发的一个功能, 主要是为了同一台电脑上, 多个程序直接通信)
# unix系统的中心思想是: 一切皆文件
# 一种: AF_INET基于网络类型的套接字
# type:
# 一种是基于TCP协议
# SOCK_STREAM
# 一种是基于UDP协议
# SOCK_DGRAM
# tcp协议: 可靠的, 面向连接的, 面向字节流形式的传输方式
# udp协议: 不可靠的, 不面向连接的, 面向数据报的传输方式, 但是它快
# 创建服务器文件:
#   server_.py内容如下:
import socket
k1=socket.socket()
k1.bind(('192.168.12.32', 8800))
k1.listen()
cn,ar=k1.accept()
ret=cn.recv(1024).decode('utf-8')
print(ret)
cn.close()
k1.close()
    #client客户端文件client_.py:
# v1=socket.socket()
# v1.connect(('192.168.12.32', 8800))
# v1.send('你好'.encode('utf-8'))
# v1.close()