第三章-网络编程基础

  1,套接字:一种基于文件的套接字,AF_UNIX,(早期socket源自于Unix系统而研发的一个主要功能,主要是为了同一台电脑,多个程序直接通信)

        Unix系统中心思想:一切皆文件

  2,一种基于网络类型的套接字,AF_INET

  3,TYPE:

    tcp协议:SOCK_STREAM

UDP协议:SOCK_DGRAM

4,tcp:可靠的,面向连接的,面向字节流的传输方式

5,udp: 不可靠的,不需面向连接的,面向数据报的传输方式,但很快
6,网关:类似于一个局域网的出口和入口
7,网段:一个局域网内的ip地址范围
8,子网掩码:子网掩码 & ip地址 等到网段
9,osi五层模型:
应用层 :http,https,ftp
传输层 :tcp/udp 四层交换机,四层路由器
网络层 :ip协议 路由器 三层交换机
网络链路层 :arp协议 以太网交换机 网卡 网桥
物理层 :传输电信号 集线器 网线 光纤
a. 同一台电脑上连个py程序:打开一个文件
b, 两个电脑如何通信:连接一根网线
c, 多台电脑通信:
ex: 电脑1(源)找电脑2(目标)
电脑1首先发送一个请求帧(其中包括我的ip地址,mac地址,要找的目标的ip地址),
交换机广播这条信息给其他主机
目标主机接收到消息,对比发现自己就是被找的目标,回复交换机,将自己的ip地址,mac地址
,返回给ip地址为xxxxxx的主机
交换机单波形式返回给主机

知识点:
1. mac地址:是一个物理地址,全球唯一,类似身份证
2,ip地址:是一个四位点分十进制,它标识了计算机在网络的位置
3,arp协议: 通过目标的ip地址获取目标的mac地址的一个协议
4,端口:操作系统为主机上的每一个应用程序都随机分配了一个端口
TCP协议编程流程:
服务器端    客户端
实例化对象   实例化对象
绑定IP地址和端口
监听
接收客户端的连接 连接服务器
收发   收发
关闭    关闭
交换机与路由器的区别?
交换机的主要功能是组织局域网,经过交换机内部处理解析之后,将信息点对点,点对多的形式,发送给固定端
路由器的主要功能:进行跨网段进行数据传输,路由器选择最佳路径
EX:
  如果你须将多台电脑连接到一根网线,用交换机即可
  如果你只有一个外网IP,但是你有好多台电脑需要上网,用路由器即可
 
# 案例1 通信
import socket
import time
sk = socket.socket()  # 买了一个手机
sk.bind(('192.168.1.107',18080))    # 买了一张手机卡
sk.listen()     # 开机

sock,addr = sk.accept() # 等待朋友连接
msg_recv = sock.recv(1024)  # 接收朋友传来的bytes信息
sock.send(b'library')
print(msg_recv.decode('utf-8')) # 进行解码
time.sleep(20)
sock.close()    # 关闭电话
sk.close()      # 关机
 
 
 
import socket

class MySocket(socket.socket):      # 继承socket文件中的socket类
    def __init__(self,encoding='utf-8'):    # 给它一个默认的utf-8编码格式
        self.encoding = encoding    # 将utf-8编码格式封装给encoding
        super(MySocket, self).__init__(type=socket.SOCK_DGRAM)  # 执行父类中的__init__方法,将默认tcp协议改成udp协议

    def my_sendto(self,msg,addr):   # 定义一个发消息类
        return self.sendto(msg.encode(self.encoding),addr)  # 调用父类中的sendto方法

    def my_recvfrom(self,num):  # 定义一个接收方法
        msg_r,addr = self.recvfrom(num) # 调用父类中的recvfrom方法
        return msg_r.decode(self.encoding),addr
 
 
 





猜你喜欢

转载自www.cnblogs.com/jiujiang/p/11449598.html