热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ptthon网络编程

网络编程网络目的:数据的传输网络数据传输是一个复杂的过程ISO:国际标准化组织OSI七层模型--》网络通信标准化流程应用层:提供用户服务,具体内容由特定程序规定表示层:数据的压缩

网络编程

网络目的 : 数据的传输

网络数据传输是一个复杂的过程

ISO :国际标准化组织

OSI 七层模型 --》 网络通信标准化流程

应用层 : 提供用户服务,具体内容由特定程序规定
表示层 : 数据的压缩优化
会话层 : 建立应用连接,选择传输层服务
传输层 : 提供不同的传输服务,流量控制
网络层 : 路由选择,网络互连
链路层 : 提供链路交换,具体消息以帧发送
物理层 : 物理硬件,接口,网卡,线路

osi七层模型优点 : 将功能分开,降低了网络传输中的耦合性,每一部分完成自己的功能。可以在开发和实施的过程中各司其职。实现高内聚和低耦合的功能。

高内聚 : 单个模块功能尽量单一
低耦合 : 模块之间尽量减少关联和影响


四层
  应用层 : 应用层 表示层 会话层
  传输层 : 传输层
  网络层 : 网络层
  物理链路层: 链路层和物理层

五层(tcp/ip模型)
  应用层 : 应用层 表示层 会话层
  传输层 : 传输层
  网络层 : 网络层
  链路层 : 链路层
  物理层 : 物理层


协议(网络协议):在网络通信中,各方必须遵守的规定。包括建立什么样的连接,消息结构等

应用层 : TFTP HTTP DNS SMTP
传输层 : TCP UDP
网络层 : IP
物理层 : IEEE


网络基本概念

主机: "localhost" 表示本台计算机

网络上 : 只在本地测试使用
  ‘localhost‘ ‘127.0.0.1‘

如果想在网络上进行测试(自动使用本地可用网卡IP)
  ‘0.0.0.0‘ ‘‘ ‘172.60.50.93‘

查看 IP网络信息
  linux ifconfig
  win ipconfig

获取计算机名称
  socket.gethostname()
  ‘tedu‘

获取主机IP
  socket.gethostbyname(‘localhost‘)
  ‘127.0.0.1‘

IP地址
  在网络上用于区分一台计算机

IPv4 : 点分十进制 e.g. 192.168.1.72 0-255
  32位二进制表示

IPv6 : 128

网络连接测试命令: ping 172.60.50.92

特殊IP
  127.0.0.1 本地测试IP
  0.0.0.0 本地网卡通用IP
  192.168.1.0 表示当前网段
  192.168.1.1 表示网关
  192.168.1.255 广播地址

获取服务主机信息
  socket.gethostbyaddr("www.baidu.com")
  (‘127.0.0.1‘, [], [‘119.75.213.61‘])
    主机    别名    IP地址

将ip十进制转化为二进制
  socket.inet_aton("192.168.1.2")
  b‘\xc0\xa8\x01\x02‘

将ip二进制转化为十进制
  socket.inet_ntoa(b"\xc0\xa8\x01\x02")
  ‘192.168.1.2‘

域名 : 网络服务器IP地址的名称
url : 在网络上定位某个资源位置的字串

端口号 :端口号是网络地址的一部分,在一个系统中,在一个系统中每个网络应用监听不同的端口,以获取对应端口传输的信息

数字范围 : 1--65535

  1--255 : 一些众所周知的端口
  256--1023 : 系统应用
  1024---65535 : 自用
  推荐用  >10000 8888 9999 7777 6666


测试一个软件端口号
  socket.getservbyname(‘mysql‘)
  3306
  socket.getservbyname(‘http‘)
  80
  socket.getservbyname(‘ssh‘)
  22

传输层服务

面向连接的传输服务 ---》 tcp协议

传输特征:提供可靠的传输服务
可靠性表现: 数据在传输过程中,无失序,无差错,无重复,无丢失

* 传输过程中有建立和断开连接的过程
三次握手:建立数据传输两端的持续连接
  1. 客户端向服务器发起连接请求(我可以牵你手吗)
  2. 服务器收到连接请求进行确认,返回报文(可以\不可以)
  3. 客户端收到服务器确认进行连接创建(知道了,连接)

四次挥手断开连接的两端,保证数据的传输完整
  1.主动方发送报文,告知被动方要断开连接(我要断开连接了,你准备好)
  2.被动方返回报文,告知收到请求,准备断开(知道了)
  3.被动方再次发送报文,告知准备完毕可以断开(你断开吧)
  4.主动方发送报文完成断开(断开了)

适用情况:文件的上传下载,网络情况良好,需要必须保证可靠性的情况
比如 : 信息聊天,文件上传下载,邮件,网页获取

面向无连接的传输服务 ---》 udp协议

 传输特征 :
  * 保证传输的可靠性
  * 无需建立三次握手四次挥手的连接断开过程
  * 消息的收发比较自由,不受其他约束(请原谅我这一生放荡不羁爱自由)

适用情况 : 网络情况较差,对可靠性要求不高,收发消息的两端不适合建立固定连接
比如 :网络视频,群聊,发送广播

socket套接字编程

  套接字:通过编程语言提供的函数接口进行组合,更简单的完成基于tcp和udp通信的网络编程

套接字的分类

  流式套接字(SOCK_STREAM):传输层基于tcp的协议进行通信

  数据报套接字(SOCK_DGRAM):传输层基于udp的协议进行通信

  底层套接字(SOCK_RAM):访问底层协议的套接字

TCP套接字(服务端)

import socket

1、创建套接字

  socket.socket(socket_family = AF_INET,socket_type = SOCK_STREAM,proto = 0)

功能:创建一个套接字

参数:socket_family  地址族类型  AF_INET 表示IPv4网络通信

    socket_type  套接字类型  SOCK_STREAM 流式  SOCK_DGRAM  数据报

    proto     通常为0(选择子协议)

返回值:返回一个套接字对象

2、绑定IP端口

  sockfd.bind()

  功能:绑定IP和端口

  参数:二元元组

3、将套接字设置为可监听

  sockfd.listen(n)

  功能:将套接字设置为监听套接字,并设置监听队列

  参数:监听对象的大小  n为大于0的正整数

4、等待客户端的连接

  connfd,addr = sockfd.accept()

  功能:阻塞等待客户端连接

  返回值:connfd  一个新的套接字,用于和指定客户端通信

      addr  连接的客户端的地址

  阻塞函数:程序运行到阻塞函数位置,如果某种预期条件没有达成则暂停继续运行,直到条件达成在继续运行

5、消息收发

  data = connfd.recv(buffersize)

  功能:接受消息

  参数:每次最多接受的消息大小  bytes

  返回值:实际发送的字节数

6、关闭套接字

  close()

  功能:关闭套接字,tcp连接断开

  *telnnet ip port  表示连接tcp服务端

tcp客户端

1.创建套接字
  socket()
  * 通信的两端套接字类型相同

2. 发起连接
  connect()
  功能 : 发起连接请求
  参数 : 元组,服务器端的地址

3.发收消息
  send recv
  * 两端收发需要配合

4.关闭套接字
  close()

ptthon 网络编程


推荐阅读
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 题目 E. DeadLee:思维导图与拓扑结构的深度解析问题描述:给定 n 种食物,每种食物的数量由 wi 表示。同时,有 m 位朋友,每位朋友喜欢两种特定的食物 x 和 y。目标是通过合理分配食物,使尽可能多的朋友感到满意。本文将通过思维导图和拓扑排序的方法,对这一问题进行深入分析和求解。 ... [详细]
  • 题目要求解决一个有趣的编程挑战,即计算由四个自然数 \( p, q, r, s \) 组成的分数序列的和。具体来说,需要编写一个 C# 程序来处理这些自然数,并通过特定的数学运算得出最终结果。该任务不仅考验编程技能,还涉及对数学公式的理解和应用。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 本文详细解析了逻辑运算符“与”(&&)和“或”(||)在编程中的应用。通过具体示例,如 `[dehua@teacher~]$[$(id -u) -eq 0] && echo "You are root" || echo "You must be root"`,展示了如何利用这些运算符进行条件判断和命令执行。此外,文章还探讨了这些运算符在不同编程语言中的实现和最佳实践,帮助读者更好地理解和运用逻辑运算符。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践
    蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践 ... [详细]
  • 在最近的项目中,我们广泛使用了Qt框架的网络库,过程中遇到了一些挑战和问题。本文旨在记录这些经验和解决方案,以便日后参考。鉴于我们的客户端GUI完全基于Qt开发,我们期望利用其强大的网络功能进行Fiddler网络数据包的捕获与分析,以提升开发效率和应用性能。 ... [详细]
  • 近日,我在处理一个复杂的前端问题时遇到了极大困扰。具体来说,我之前开发了一个功能丰富的纯jQuery代码的前端GridView控件,实现了多种功能和视觉效果,并在多个项目中表现良好。然而,最近在尝试应用 `border-box` 布局模式时,却遇到了意想不到的兼容性和性能问题。这提醒我们在条件尚未完全成熟的情况下,应谨慎使用 `border-box` 布局模式,以免引入不必要的复杂性和潜在的bug。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • Nginx 反向代理配置与应用指南
    本文详细介绍了 Nginx 反向代理的配置与应用方法。首先,用户可以从官方下载页面(http://nginx.org/en/download.html)获取最新稳定版 Nginx,推荐使用 1.14.2 版本。下载并解压后,通过双击 `nginx.exe` 文件启动 Nginx 服务。文章进一步探讨了反向代理的基本原理及其在实际应用场景中的配置技巧,包括负载均衡、缓存管理和安全设置等,为用户提供了一套全面的实践指南。 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
author-avatar
总铺
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有