江门东莞网站建设,网页版游戏大全,拼多多商品关键词搜索排名,鹰潭北京网站建设学习目标
1、了解计算机网络相关信息
2、掌握Python3编码转换的方法
3、掌握TCP客户端及服务器端开发流程及应用实践
4、socket套接字之send和recv原理剖析
5、掌握网络综合案例#xff1a;多任务版TCP服务端程序应用实践
一、计算机网络概述
1、网络的概念
网络就是将具有独立…学习目标1、了解计算机网络相关信息2、掌握Python3编码转换的方法3、掌握TCP客户端及服务器端开发流程及应用实践4、socket套接字之send和recv原理剖析5、掌握网络综合案例多任务版TCP服务端程序应用实践一、计算机网络概述1、网络的概念网络就是将具有独立功能的多台计算机通过通信线路和通信设备连接起来在网络管理软件及网络通信协议下实现资源共享和信息传递的虚拟平台。2、为什么要学习网络学习网络的目的就是能够编写基于网络通信的软件或程序通常来说就是网络编程。3、IP地址概述思考一个问题当我们在计算机中使用微信和你心中那个“她”聊天时信息是如何精准的传递到她的计算机中的呢答是通过计算机的IP地址来实现的IP地址是分配给网络设备上网使用的数字标签它能够标识网络中唯一的一台设备好比现实中每个人都有一个手机号。4、IP地址的表现形式IP地址一共有4位第1位1~223第234位0~255注意事项① IP地址分为两类 : IPv4和IPv6② IPv4是目前使用的IP地址③ IPv6是未来使用的IP地址5、IP地址的作用通过IP地址找到网络中唯一一台设备然后可以跟这个设备进行数据通信。6、Ubuntu中网络查询命令命令名说明ifconfig查看网卡信息ping检查网络是否正常☆ ifconfig命令① 172.16.47.199是在网络中的地址使用ifconfig主要是查看网卡对应网络中的IP地址。② 127.0.0.1表示本机地址提示如果和自己的电脑通信就可以使用该地址。③ 127.0.0.1该地址对应的域名localhost域名是ip地址的别名通过域名能解析出一个对应的ip地址。☆ ping命令① ping www.baidu.com 检查是否能上公网② ping 当前局域网的ip地址 检查是否在同一个局域网内③ ping 127.0.0.1 检查本地网卡是否正常ping命令其结果是连续的操作如果想停止我们可以使用快捷键Ctrl C终止7、端口和端口号的概念☆ 计算机通信原理问题如果在一台电脑上使用飞秋给另外一台电脑上的飞秋发送数据并且另外的这台电脑还运行着多个软件它是如何区分这多个软件把数据给飞秋的呢?答其实每运行一个程序都会有一个端口想要给对应的程序发送数据找到对应的端口即可。端口就是传输数据的通道好比教室的门是数据传输必经之路。而且每一个端口都会有一个对应的端口号操作系统为了统一管理这么多端口就对端口进行了编号这就是端口号端口号其实就是一个数字好比我们现实生活中的门牌号想要找到端口通过端口号即可如飞秋软件的默认端口号就是2345。最终通信结果通过ip地址找到对应的设备通过端口号找到对应的端口然后通过端口把数据给应用程序。☆ 扩展端口号扩展① 知名端口号知名端口号是指众所周知的端口号范围从0到1023这些端口号一般固定分配给一些服务比如21端口分配给FTP文件传输协议服务22端口分配给SSH安全外壳协议主要用于远程连接与文件传输25端口分配给SMTP简单邮件传输协议服务80端口分配给HTTP服务443端口分配给HTTPS服务等等。② 动态端口号一般程序员开发应用程序使用端口号称为动态端口号。动态端口号的范围是从1024到65535如果程序员开发的程序没有设置端口号操作系统会在动态端口号这个范围内随机生成一个给开发的应用程序使用。注意当运行一个程序默认会有一个端口号当程序退出时所占用的这个端口号就会被释放。设置端口建议8000以后8、socket套接字☆ 目前存在的问题到目前为止我们学习了IP地址和端口号使用这些我们就可以在茫茫的网络海洋中进行畅游了么答案是否定的☆ socket套接字那我们需要什么工具呢答socket套接字工具它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定一台计算机可以接收其他计算机的数据也可以向其他计算机发送数据。这就好比现实中的电话当知道了对方的电话号码后需要使用电话才能进行通讯程序之间想要进行网络通信需要基于这个socket套接字socket套接字就是程序间进行网络通讯的工具。☆ socket使用场景不夸张的说只要跟网络相关的应用程序或者软件都使用到了socket。9、TCP概述☆ 为什么需要TCP协议之前我们学习了IP地址和端口号通过IP地址能够找到对应的设备然后再通过端口号找到对应的端口再通过端口把数据传输给应用程序这里要注意数据不能随便发送在发送之前还要选择网络传输方式传输协议保证程序之间按照指定的传输规则进行数据的通信。☆ TCP概述TCP的英文全拼(Transmission Control Protocol)简称传输控制协议它是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通信步骤① 创建连接 ② 传输数据 ③ 关闭连接TCP通信模型相当于生活中的’打电话‘在通信开始之前一定要先建立好连接才能发送数据通信结束要关闭连接。☆ TCP的特点① 面向连接通信双方必须先建立好连接才能进行数据的传输并且双方都会为此连接分配必要资源用来记录连接的状态和信息。当数据传输完成后双方必须断开此连接以释放系统资源。② 可靠传输☆ TCP采用发送应答机制通过TCP这种方式发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传送成功☆ 超时重传发送端发送一个报文之后就会启动定时器如果指定时间内没有得到应答就会重新发送这个报文段☆ 错误校验TCP用一个校验和函数来校验数据是否有错误在发送和接收时都要计算校验和☆ 流量控制和阻塞管理流量控制用来避免发送端发送过快而使得接收方来不及接收扩展UDP协议不可靠传输协议TCP可靠协议数据可以100%传输日常通信、数据传输一定要保证可靠性使用TCP。UDP不可靠协议只能保证速度但是没办法保证数据传输质量发送5M 接收3.75M有些情况下我们对数据的质量没有要求可以考虑使用UDP如视频通话。二、Python3编码转换1、为什么要学习编码转换在计算机网络中数据都是以二进制的形式进行传输的。所以在网络传输数据的时候数据需要先编码转化为二进制bytes数据类型I Love Python 字符串 转换为二进制数据 网络中传输2、数据的编码转换数据转换方法说明函数名说明encode编码 将字符串转化为字节码decode解码 将字节码转化为字符串提示encoed()和decode()函数可以接受参数encoding是指在编解码过程中使用的编码方案。字符串编码str.encode(encoding”utf-8”)二进制解码bytes.decode(encoding“utf-8”)三、TCP客户端及服务器端开发实践1、TCP网络应用程序开发分类① TCP客户端应用程序开发② TCP服务器端应用程序开发客户端程序是指运行在用户设备上的程序服务端程序是指运行在服务器设备上的程序专门为客户端提供数据服务。那如何记忆呢主动发起建立连接请求的是客户端程序等待接受连接请求的是服务端程序。2、TCP客户端程序开发流程及应用实践五步走☆ 开发流程介绍☆ socket类的介绍① 导入socket模块importsocket ② 创建客户端socket对象使用socket类 socket.socket(AddressFamily,Type)客户端socket类的参数和方法说明参数名说明AddressFamilyIP地址类型, 分为IPv4和IPv6Type传输协议类型开发客户端需要使用的函数☆ TCP客户端程序开发实践importsocketif__name____main__:# 1、创建客户端套接字对象tcp_client_socketsocket.socket(socket.AF_INET,socket.SOCK_STREAM)# 2、和服务器端套接字建立连接(参数必须是一个元祖)tcp_client_socket.connect((192.168.31.181,8080))# 3、发送数据tcp_client_socket.send(hell, itheima.encode(encodingutf-8))# 4、接收数据recv_datatcp_client_socket.recv(1024).decode(utf-8)print(recv_data)# 5、关闭客户端套接字tcp_client_socket.close()使用网络调试查看效果如下图所示3、TCP服务器端开发流程及应用实践七步走☆ 服务器端☆ 开发流程介绍☆ socket类的介绍① 导入socket模块importsocket ② 创建客户端socket对象使用socket类 socket.socket(AddressFamily,Type)客户端socket类的参数和方法说明参数名说明AddressFamilyIP地址类型, 分为TPv4和IPv6Type传输协议类型开发客户端需要使用的函数① 导入socket模块importsocket ② 创建服务器端socket对象使用socket类 socket.socket(AddressFamily,Type)客户端socket类的参数和方法说明参数名说明AddressFamilyIP地址类型, 分为TPv4和IPv6Type传输协议类型开发服务器端需要使用的函数方法名说明bind绑定IP地址和端口号listen设置监听accept等待接受客户端的连接请求send发送数据recv接收数据☆ TCP服务器端程序开发实践importsocketif__name____main__:# 1、创建服务器端套接字对象tcp_server_socketsocket.socket(socket.AF_INET,socket.SOCK_STREAM)# 2、绑定IP地址与端口号tcp_server_socket.bind((,8888))# 3、开启监听tcp_server_socket.listen(128)# 4、等待接收客户端连接请求conn_socket,ip_porttcp_server_socket.accept()print(客户端IP端口,ip_port)# 5、接收数据recv_dataconn_socket.recv(1024)print(接收到的数据,recv_data.decode())# 6、发送数据conn_socket.send(客户端的数据已经收到了.encode())# 7、关闭套接字conn_socket.close()tcp_server_socket.close()(socket.socket fd4, familyAddressFamily.AF_INET, typeSocketKind.SOCK_STREAM, proto0, laddr(‘10.1.1.10’, 8888), raddr(‘10.1.1.10’, 48190),(‘10.1.1.10’, 48190))变量1变量2 (第一个元素值第二个元素值)4、TCP服务器端开发面向对象版本# 导入模块import socket# 创建一个WebServer服务器端类classWebServer(object):# 定义__init__()魔术方法用于对象初始化def __init__(self):# 创建套接字对象self.tcp_server_socket socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 绑定IP与端口号self.tcp_server_socket.bind((,8090))# 设置监听self.tcp_server_socket.listen(128)# 定义一个handle_client_request()def handle_client_request(self,new_socket,ip_port):# 接收客户端消息recv_data new_socket.recv(1024)recv_data recv_data.decode(gbk)print(f{ip_port}客户端发送过来的消息{recv_data})# 返回发送消息给客户端content 信息已收到overover.encode(gbk)new_socket.send(content)# 处理完成后关闭新套接字对象# new_socket.close()# 定义一个start方法用于启动WebServer接收客户端连接defstart(self):whileTrue:# 等待客户端连接new_socket,ip_port self.tcp_server_socket.accept()# 定义一个方法用于接收和发送消息self.handle_client_request(new_socket,ip_port)# 创建程序执行入口实例化WebServer类生成对象if__name__ __main__:# 实例化对象ws WebServer()# 调用自身方法用于启动服务ws.start()5、扩展TCP服务器端开发之多客户端# 导入模块importsocket# 1、创建套接字对象tcp_server_socketsocket.socket(socket.AF_INET,socket.SOCK_STREAM)# 2、绑定IP与端口tcp_server_socket.bind((,8090))# 3、设置监听tcp_server_socket.listen(128)# 4、等待客户端连接whileTrue:# 使用try...except捕获连接异常try:new_socket,ip_porttcp_server_socket.accept()whileTrue:try:# 5、接收客户端发送过来的消息recv_datanew_socket.recv(1024)recv_datarecv_data.decode(gbk)print(f{ip_port}{recv_data})contentinput(服务器端消息).encode(gbk)new_socket.send(content)exceptConnectionResetError:print(f{ip_port}客户端连接已经断开)breakexcept:print(出错退出服务器监听)break# 关闭套接字对象tcp_server_socket.close()6、TCP网络应用程序开发注意点端口复用importsocketif__name____main__:# 1、创建服务器端套接字对象tcp_server_socketsocket.socket(socket.AF_INET,socket.SOCK_STREAM)# 设置端口复用tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)# 2、绑定IP地址与端口号tcp_server_socket.bind((,8888))# 3、开启监听tcp_server_socket.listen(128)# 4、等待接收客户端连接请求conn_socket,ip_porttcp_server_socket.accept()print(客户端IP端口,ip_port)# 5、接收数据recv_dataconn_socket.recv(1024)print(接收到的数据,recv_data.decode())# 6、发送数据conn_socket.send(客户端的数据已经收到了.encode())# 7、关闭套接字conn_socket.close()tcp_server_socket.close()