django-网络编程
网络通信概述:
- 了解是怎么通信的?
- 两大块,1,udp,2,tcp,这两个都可以实现通信,udp比较简单,tcp比较复杂,
- 我们要实现一个功能,你在你的电脑发送一个hello,别人的电脑能受到,这就行了,
- 网络是美国人发明的,
ip地址:
- 为什么数据能准确传输给某一台设备,
- 这是因为有一个唯一标记,怎么标记的?通过ip地址,
- ip地址用来标记网络上的一台电脑,
- Linux命令:
- 查看ip地址:ifconfig,
- 关闭网卡:sudo ifconfig ens40 down,
- ctrl+A快速回到行首,ctrl+E,快速回到行末,
- 开启网卡:sudo ifconfig ens40 up,
ip地址的分类:
- ip地址分为两类,ipv4,ipv6,
- ipv4用的最多,ip有四组数字,
- 256*256*256*256,0-255,每一个组有256个值,一共是256个四次方,
- 现在这个值不够了,
- 每一个区域的ip都是不同的,可以根据ip判断哪一个国家,哪一个地区,哪一个人,所以你违法犯罪,一下就能找到你,
- ipv6的诞生就成为了必然,号称全球的每一粒沙子都可以一个ip,
- 但是ipv6现在还是不常用的,因为使用这个很多设备都要改,很多机构都排斥不用,但是未来每一个人都有很多设备的时候,肯定还会用ipv6,
端口:
- A电脑到了B电脑,是通过ip,
- 到了B电脑,一个电脑有很多的程序,是给哪一个程序呢?
- 所以还需要一个值,就是端口号,用来标记这个电脑上的一个程序,
- 所以A传输数据到B的时候,至少五个内容,
- dest_ip(目标ip):192,。168.1.2
- src_ip(源ip):192.168.1.1
- dest_port(目标端口):7788
- src_port(源端口):4567
- content:你好
- 这样A就可以发送数据到B,B也可以发送数据到A了,
- 所以网络通信必备ip和端口,
端口分类:
- 端口可以想象成一个门,这就是门牌号,
- 一个程序没有运行之前叫程序,运行起来了叫进程,
- 端口分为两类,知名端口和动态端口,
- 知名端口,大家都知道,小于1024的不能随便用,大于1024的随便用,
- 端口从0-65535,动态端口就是从1024-65535
socket介绍,
- 套接字,
- 套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。
- 作用:完成两个应用程序之间的数据传输
- 实质:一种独立于协议的网络编程接口
- 使用socket就可以完成网络通信,
- 今天你见到的所有的网络程序,百分之百用到了socket,只有通过他才可以通信,
- socket是完成网络通信的必备的东西,
- 想用socket,怎么用?先创建,读写,关闭,
- 格式:
- import socket
- 这是创建:
- s=socket.sockt(socket.AF_INET,socket.SOCK_DCRAM)
- s=socket.sockt(socket.AF_INET,socket.SOCK_STREAM)
- socket.AF_INET这是代表ipv4,socket.socket.STREAM这是tcp,socket.SOCK_DCRAM,这是udp,
- 所以可以创建是基于udp的,还是tcp的,
收发数据:
- 可以写一个程序发送数据,
- python交互模式:python3,进入交互模式,
- 不只是要发送,还要可以接收,
- 需要有一个程序拥有一个固定的端口,
- 代码不是从第一行写的,是什么时候用什么时候补的,
- 所以编程的思想最重要了,一定要理清程序,理清逻辑,
- 需要有编码规范,pep8,
- 收数据的流程:
- 1,创建套接字,
- 2,发送数据,
- 3,关闭,
- 接收数据的流程:
- 1,创建套接字,
- 2,绑定本地自己的信息,ip和端口
- 3,接收数据,
- 4,关闭,
- 发送可以不绑定端口,但是接收一定要绑定端口,
输入对方ip,port,全双工,半双工,单工,
- 在不同电脑可以通信,同一台电脑也可以进行通信,
- 本机ip,127.0.0.1,
- 套接字,可以同时收发数据的,
- 单工,百分之百只能忘一个方向,广播,
- 半双工,可以收,也可以发,但是同一时间只能收或者发,对讲机,
- 全双工,可以同时收发,比如打电话,这个socket就是全双工的,
udp聊天器:
- 先模仿,再创造,工作中也是,先找一个人模仿学习,
- 编程思路,往往就是逻辑的推理,一般就是正推和倒推,
- 同一个功能,可以封装到一个函数里面去,这个也是写的多了,逐渐的封装的,不是上来直接就封装的,
- 写函数的时候有局部变量的问题,需要理清楚,
tcp介绍:
- 传输控制协议,
- udp想象成写信,每一封信都要写收件人的地址,这种不太安全,这封信可能丢,
- tcp比较安全,更加稳定,tcp也可能丢包,但是会重发,比如打电话,打电话的时候会嘟嘟嘟的响,这是在确定通道,通了之后这个通道会占用,别人就不能打了,
- 所以tcp比较复杂, 但是比较安全,稳定,
- ----------------------------------
- tcp采用了应答机制,
- 比如udp,
- a给b发了一个信息,b有没有收到,这是不会给a回复的,
- 但是tcp,
- a发送了一个消息给b,b会告诉a我收到了,这是有回复的,a发送了之后,会开始计时,如果没有收到,会超时重传,
- 所以tcp的机制,就比较安全,会确保数据已经传递过去了,
- -----------------------------------
- 使用迅雷下载的时候,会有下载也会有上传,这种上传就是一种应答,告诉对方我接收到了,
- 此外,tcp还有错误校验,流量控制,阻塞管理,这些机制,这些不用记,总之这些机制,保证了tcp比较安全稳定,
- 现在udp基本不用,基本都是用tcp,因为udp不稳定,不安全,
- 现在访问百度,使用微信,都是tcp协议,
- 比如买票,如果udp就完了,扣了钱,但是对方没收到,就完了,
tcp客户端,
- tcp严格区分客户端和服务端,udp是不区分客户端和服务端的
- 什么是服务器?比如游戏分区,这个就是在选择服务器,
- 什么是客户端?比如qq就是客户端,手机上的app都是客户端,
- ----------------------
- tcp的客户端的创建:
- 1,创建套接字,
- 2,建立连接
- 3,发送数据或者接受数据
- 4,关闭套接字,
tcp的服务器:
- 创建tcp的服务器:
- 1,创建一个套接字,
- 2,绑定ip和port
- 3,使套接字变为可以被动连接,
- 4,等待客户端的连接,
- 5,接受发送数据,
- 比如生活中的电话机,
- 1,买一个手机,创建套接字,
- 2,插上手机卡,绑定本地信息
- 3,设计手机为正常接听状态,让默认的套接字由主动变为被动,
- 4,静静的等别人拨打,等待客户端的链接,
- 服务器可以为多个客户端服务,
总结:
- udp和tcp比较
- tcp客户端和服务端,
- 的确学习方法不能以视频为主