网络:
-
概念:实现数据通信的虚拟平台。
-
学习的目的:方便我们后期开发出来的任务模型拿到的结果和web开发人员进行对接。
-
IP地址:用于唯一识别网络中的某台设备的描述,IPV4和IPV6
-
查看机器的IP地址:
Linux系统:ifconfig windows系统:ipconfig 检查网络连通状况:ping 公网网址(某一台机器的IP地址)
-
端口:网络中不同机器上的不同的程序完成数据通信是数据传输的通道
-
端口号:通过端口号可以唯一识别一台机器上的某个程序,一共有2**16个
- 分为知名端口和动态端口
- 知名端口:0-1023
- 动态端口:1024-65535
- 分为知名端口和动态端口
-
socket:
- 是一款用于实现网络通信的工具,又称套接字。
-
TCP协议:
- 概念:传输控制协议,是一种面向连接的、可靠的、基于字节流的数据传输协议。
- 特性:
- 面向连接
- 可靠传输
- 发送应答机制、超时重传、错误校验、流量控制和阻塞管理
-
网络中传输数据的方式:使用二进制的方式
-
python3中的编解码:
- 编码:data.encode()
- 解码:data.decode()
- Linux系统中默认的编解码方式是 utf-8
- Windows系统中默认的编解码方式是gbk
-
客户端和服务端:
- 客户端是享受服务的这样的一类程序,会主动发起建立连接的请求,客户端程序一般运行在用户的终端设备上
- 服务端是提供服务的这样的一类程序,等待接收连接的请求,服务器端程序一般运行在服务器上
-
TCP客户端的开发流程:
- 1、建立套接字
- 2、与服务端建立连接
- 3、发送信息
- 4、接收信息
- 5、完成对应的操作之后,可以关闭连接
-
TCP服务端的开发流程:
-
1、建立套接字
-
2、绑定IP地址,固定自己的位置
-
3、设置监听
-
4、等待接收一些客户端的连接请求
-
5、发送数据
-
6、接收数据
-
7、关闭套接字
-
注意点:
-
bind函数和connect函数一样,传入的参数是一个元组,元组里面包含IP地址和端口号,只不过如果服务端是在本地上运行,那么绑定地址的时候可以使用空字符串替代。
-
创建的服务端套接字和与客户端建立连接后的这个套接字不一样,实现的作用和功能不一样,前者是用于监听和接收客户端的连接请求,后者是与客户端完成数据通信的套接字。
-
TCP客户端可以不用绑定端口号,TCP服务器端必须要绑定端口号,固定自己,让客户端能够找到服务端并请求提供服务。
-
用于数据通信的套接字一旦被关闭,那么另一方的recv函数会解阻塞,会接收到空字符串,长度为零,可以利用这个特性判断通信的对方是否已经显式的关闭了套接字。
-
设置端口复用(解决在调试TCP服务器端程序时,爆出的错误:地址已被使用):
socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
-
-
recv和send函数的实现机制:
- 底层是通过缓冲区先将要发送的数据和要接收的数据进行缓存,当达到了指定的上限,则会将这一步缓存的数据交给要接收的变量。
-
多任务版TCP服务器端程序的实现注意点:
- 为什么使用多线程而不是用多进程?
- 这里使用通过网络完成客户端和服务器端的数据通信,是网络I/O操作,适合使用多线程来处理,另一方面,线程占用资源更少,更加的灵活。
- 为什么使用多线程而不是用多进程?
-
总结:多尝试,多百度有困难问百度。多练练