pythonnet-网络编程(1)
python的网络编程有不少难点,也容易忘记,最近我会陆续发出系统、完整pythonnet知识的博客,一边复习一边分享,感兴趣的可以关注我。
话不多说,开始吧。
网络编程
目的:数据的传输
ISO(国际标准化组织)
OSI七层模型----->网络通信的标准化流程
应用层:提供用户服务,具体的内容由特定的程序规定
表示层:提供数据的加密和压缩优化
会话层:确定建立应用链接,选择传输服务
传输层:提供数据传输服务,进行流量控制
网络层:路由选择,网络互联
链路层:提供链路交换,具体消息的发送
物理层:物理硬件,接口,网卡的规定
可划分为四层模型
四层模型
应用层
传输层
网络层
物理链路层
划分为五层模型(TCP/IP模型)
应用层(应用层 表示层 会话层)
传输层
网络层
链路层
物理层
OSI模型的优点:将功能分开,降低网络传输中的耦合度,使开发流程更加清晰,
每部分各司其职。
高聚合:每个模块功能尽量单一,不会多个功能掺杂
低耦合:尽量降低每个模块之间的关联性
网络协议:在网络通信中协议各方必需遵守的规定。如建立什么连接,消息结构如何解析等。
应用层:TFTP HTTP DNS SMTP
传输层:TCP UDP
网络层:IP
物理层:IEEE
网络相关概念
网络主机:在网络上确定一台主机
本地使用:“localhost” 127.0.0.1
网络地址:"0.0.0.0" "172.60.50.54"(本机网络IP)
查看本机IP地址:ifconfig (linux)
ipconfig (windows)
ipython3 进入交互模式
通过计算机名获取匹配的IP
socket.gethostbyname("localhost")
"127.0.0.1"
获取本机的计算机名
socket.gethostname()
"xxxx"
IP地址
网络上确定一台主机的地址
IPv4:点分十进制
IPv6:128位
网络连接测试
ping 172.60.50.182
特殊IP
127.0.0.1 本地测试IP
0.0.0.0 自动使用本地可用网卡IP
192.168.1.0 代表当前网段
192.168.1.1 通常为网关地址
192.168.1.255 广播地址
IP地址转换为十六进制表达
socket.inet_aton('192.168.1.2')
b'\xc0\xa8\x01\x02'
域名:网络服务器地址在网络上的名称
端口号: 端口号是地址的一部分,在一个系统中每个网络应用监听不同的端口,以获取对应端口传递的信息
取值范围 : 1----65535
1-255 一些通用端口 (众所周知的程序占用)
256 --1023 系统端口
1024 -- 65535 自用端口 >10000
传输层服务
面向连接的传输服务 ---》 tcp协议
传输特征:
可靠的数据传输
可靠性 : 数据在传输中,无失序 无差错 无丢失 无重复
在数据传输前和传输结束后需要建立连接和断开连接
三次握手 : 在面向连接的传输服务中建立连接的过程
1. 客户端向服务器发送连接请求
2. 服务器接受到请求进行确认,返回确认报文
3. 客户端收到服务器回复最终确认连接
四次挥手 : 在面向连接的传输服务站断开连接的过程
1. 主动方发送报文,告知被动方要断开连接
2. 被动方回复报文,表示已经接收到请求,准备断开
3. 被动方再次发送报文,表示准备处理就绪,可以断开
4. 主动发发送确认报文,断开连接
应用情况 : 适用于传输较大的内容或文件,网络良好,需 要保证传输可靠性的情况
e.g. 聊天信息 文件的上传下载, 邮件处理
网页获取
面向无连接的传输服务 ---》 udp协议
传输特点:
不保证传输的可靠性
没有连接和断开的过程
数据的首发比较自由
适用情况 : 网络情况可能产生丢包,对传输可靠性要求低
e.g. : 网络视频, 群聊,广播等
socket 套接字编程
目的 : 通过编程语言提供的套接字编程接口,可以更简单的完成基于tcp和udp的编程
套接字 : 完成上述目标的一种编程手段
套接字类别
流式套接字(SOCK_STREAM):传输层基于tcp的协议通信
面向连接可靠的传输 tcp的传输 流式套接字
数据报套接字(SOCK_DGRAM): 传输层基于udp协议传输
面向无连接不可靠的传输 udp的传输 数据报套接字
底层套接字 (SOCK_RAM): 访问底层协议套接字
TCP的服务端
import socket
1. 创建套接字
socket.socket(sock_family = AF_INET,
sock_type = SOCK_STREAM,
proto = 0)
功能 : 创建套接字
参数 : sock_family 地址族类型 AF_INET ipv4网络通信
sock_type 套接字类型 SOCK_STREAM 流式
SOCK_DGRAM 数据报
proto 通常为0 选定子协议类型
返回值 : 返回套接字对象
2. 绑定地址
sockfd.bind(addr)
功能 : 绑定地址
参数 : addr ---》 元组 (ip,port) ('0.0.0.0',1234)
3. 设置监听套接字
sockfd.listen(n)
功能: 将套接字设置为监听套接字,创建监听队列
参数: 监听队列大小
* 一个监听套接字可以连接多个客户端
4. 等待接受客户端连接
connfd,addr = sockfd.accept()
功能 : 阻塞等待处理客户端连接
返回值 : connfd 新的套接字,用于和客户端通信
addr 连接的客户端的地址 (ip,port)
* 阻塞函数 : 当程序运行到阻塞函数位置,如果某种条件没有达成则暂停程序运行,知道条件达成结束阻塞
5. 消息的收发
data = connfd.recv(buffersize)
功能 : 接受消息
参数 : 一次接受消息的大小 字节
返回值 : 返回接受到的内容
n = connfd.send(data)
功能 : 发送消息
参数 : 要发送的内容 (bytes格式)
返回值 : 返回实际发送的字节数
6. 关闭套接字
sockfd.close()
* telnet ip port
客户端
1. 创建套接字 (和服务端套接字类型相同)
2. 发起连接
connect(addr)
功能 : 向服务端发起连接
参数 : 服务端地址 元组
3. 消息收发
4. 关闭套接字
下面看代码,此为客户端代码

此为服务端代码:

好了,本小节完,小伙伴们可以使用pycharm(社区版免费)运行试试看,我们下次见!
pythonnet-网络编程(1)的更多相关文章
- PythonNET网络编程1
# PythonNET 网络编程 ISO(国际标准化组织) 制定了 OSI(Open System Interconnectio),意为开放式系统互联.国际标准化组织(ISO)制定了OSI模型,该模型 ...
- PythonNET网络编程4
本地套接字 Linux 文件 b(块设备文件) c(字符设备文件) d(目录) -(普通文件) l(链接) s(套接字) p(管道) 作用:用于本地不同的程序间进行通信 创建流程 创建本地套接字 so ...
- PythonNET网络编程3
IO IO input output 在内存中存在数据交换的操作都可以认为是IO操作 和终端交互 : input print 和磁盘交互 : read write 和网络交互 : recv send ...
- PythonNET网络编程2
UDP应用:广播 广播:一点发送,多点接收 广播地址:一个网段内有一个指定的广播地址,是该网段的最大地址 192.168.2.255 广播风暴:一个网络中有大量的广播就会产生广播风暴占用大量带宽,影响 ...
- 猫哥网络编程系列:HTTP PEM 万能调试法
注:本文内容较长且细节较多,建议先收藏再阅读,原文将在 Github 上维护与更新. 在 HTTP 接口开发与调试过程中,我们经常遇到以下类似的问题: 为什么本地环境接口可以调用成功,但放到手机上就跑 ...
- python select网络编程详细介绍
刚看了反应堆模式的原理,特意复习了socket编程,本文主要介绍python的基本socket使用和select使用,主要用于了解socket通信过程 一.socket模块 socket - Low- ...
- Linux Socket 网络编程
Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
- 浅谈C#网络编程(一)
阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...
- C++11网络编程
Handy是一个简洁优雅的C++11网络库,适用于linux与Mac平台.十行代码即可完成一个完整的网络服务器. 下面是echo服务器的代码: #include <handy/handy.h&g ...
随机推荐
- Java8 中的 Optional
从 Java 8 引入的一个很有趣的特性是 Optional 类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) —— 每个 Java 程序员都 ...
- CentOS 7 部署 nginx-1.14.2
参考:http://www.linuxe.cn/post-168.html 链接:https://pan.baidu.com/s/1NzHIY7mYgHJ6yMF_rdd0ZQ 提取码:n8o9 下载 ...
- thinkphp5使用前置后置操作
下面举个例子,前置删除的例子 模型事件只可以在调用模型的方法才能生效,使用查询构造器通过Db类操作是无效的 控制器中实例化类 $cate=model('cate'); $cate-> ...
- Androidstudio坑
1.intel haxm sdkmanager显示不可选中,而且boost设置好了intervt 解决:重新关闭,打开系统,然后开启.... 2.解决不了一直报错,(自己的代码,明明已经没有问题) 有 ...
- css Masks
css Masks:添加蒙板: 测试在微信端可以支持了.谷歌浏览器支持.safari应该也是支持的. 效果:http://runjs.cn/code/xrrgmgmk 但是谷歌可以支持这样子的:htt ...
- CSS样式之操作属性一
********css之操作属性******** 一.文本 1.文本颜色:color 颜色属性被用来设置文字的颜色 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 ...
- 开启 PHP 错误提示配置步骤详解
PHP编码出错不提示,这对于开发来说,是很不方便的.下面讲解如何开启错误提示步骤: 1. 打开php.ini文件. 以我的ubuntu为例,这个文件在: /etc/php5/apache2 目录下. ...
- Nuxt使用记录
代码及插件需要根据环境引入 (服务端没有window,document,浏览器端没有global) const myPlugins = { install(Vue, options) { Vue.pr ...
- FastDFS整合Nginx
浏览器访问FastDFS存储的图片需要通过Nginx访问 需要安装fastdfs-nginx-module.Nginx 安装fastdfs-nginx-module模块 (1)将fastdfs-ngi ...
- Spring 计划任务
计划任务在Spring 中实现变得非常简单: 1. 首先通过在配置类中注解 @EnableScheduling 来开启对计划任务的支持 2. 然后在你执行任务的方法上注解 @Scheduled 来声明 ...