第三十天网路的基础
1.在同台机器上调用不同文件上的py文件我们可以使用import指令,如果使用不同的机器之间我们只能使用通信进行传输之后再进行使用,即在不同终端是进行程序的通信才产生了网络
二软件开发的构架
1. 我们应该知道两个程序之间的通讯大概可以分为两类:
第第一类为应用类:qq、微信、网盘、优酷这一类属于安装的应用桌面的应用(c/s)
第二类为web类:比如百度、知乎、博客园等使用浏览器就可以访问直接使用的应用(b/s)
这些·本质上都是两个程序之间的通讯,二者两个类型对应了两个软件开发的架构
2.c/s模式就是client(客户端)/server(服务端),并且服务端要一直进行程序的运行,等待为client进行服务 大概模式如下图:
3.b/s模式:brower(浏览器)/server(服务器),主要是基于浏览器进行内容的浏览。
4.为什么现在b/s那么火:主要是因为基于统一的路径(也就是说入口统一),手机端使用的都是小程序‘
5.我们进行网络编程的思想基本上是:解耦、分治的思想
6.b/s和c/s之间的关系为:b/s<=c/s
7.要进行不同终端之间的通讯,就需要找到网卡上配置的mac地址(这个是电脑制作好后,分配的全球唯一的地址,共48位,用12位16进制表示)
5.计算机通信的发展过程:
1.早期是通过联机进行的:
2ip地址:是由4个8位二进制组成,即0.0.0.0-255.255.255.255
3.arp协议:简单来说就可以通过ip地址找到对应的mac地址
4由于通信终端的增多,后期出现了局域网和交换机:
5.不同局域网之间的通信引出了广域网之间的概念这个就需要使用路由器
如果在单纯的使用交换机可能会引发广播风暴
在局域网中的终端设备想要访问局域网外部的机器就要通过网关
6.通过ip地址和子网掩码的按位与既可以得到网段的地址:
192.168.0.11
255.255.255.0
11000000.10101000.00000000.00001011(ip地址)
11111111.11111111.11111111.00000000(子网掩码)
11000000.10101000.00000000.00000000(局域网的网段)
192.168.0.0
7.通过ip我们是可以找到了唯一的终端设备,但是我们却不能找到是给哪一个软件使用:所以我们引出了端口的概念(即通过端口我们可以找到终端上的程序)
8.在计算机上,每一个网络通信的程序都会开一个端口
9.在同一时间,只会有一个程序占用这一个端口
10.不可能在同一时间内有两个程序占用同一个端口
11.端口的范围位0-65535,但是一般情况下8000以前的都是系统占用,我们使用都是从8000以后使用
12.总结以上我们可以得出ip使用来寻找终端机器的,二·端口号使用来寻找程序的
13.tcp协议:
1.当应用程序希望通过TCP与另一个应用程序进行通讯时,它会发送一个通信请求,这个请求必须被送到一个确切的地址,在双方握手之后TCP将两个应用程序之间建立一个双工的通信
这个全双工的通信将占用两个计算机之间的通信线路,直到它被一方或者双方都关闭为止。
14.udp协议
当应用程序想要通过UDP与另一个程序进行通讯时,传输数据之前源端与终端不需要建立连接
当它想要传送数据时,就简单的获取来自应用程序的数据,并尽可能快的扔到网络上去
15.tcp和udp进行比较:
tcp 要双方同意才能通信,安全,相当于打电话,udp不需要建立连接,传输速度快,不安全,相当于发短信。
16.要进行跨区域进行交流就要遵循互联网协议:
17.socket
1.socket其实就是ip+port,主要分为两种类型:文件型和网络型/
2.基于网络型的格式:AF-INET(使用与ipv4)AF-INET6(使用于ipv6)
3.基于tcp协议下的socket程序:
服务器的程序
import socket sk=socket.socket() #先买一个手机 sk.bind(('127.0.0.1',8080)) #绑定手机卡,数据以元组实行进行传输 sk.listen()#进行服务器的服务功能 conn,addr=sk.accept()#进行服务器和客户机之间的连接 while True: ret=conn.recv(1024).decode('utf-8') print(ret) if ret=='bye': break else: info=input('请输入信息:') conn.send(bytes(info,encoding='utf-8')) conn.close() sk.close()
客户机的程序:
import socket sk=socket.socket() sk.connect(('127.0.0.1',8080))#以元组的实行进行传输 info=input('请输入信息:') sk.send(bytes(info,encoding='utf-8')) while True: ret=sk.recv(1024).decode() print(ret) if ret!='bye': info=input('请输入信息:') sk.send(bytes(info,encoding='utf-8')) else: break sk.close()
结果为