专栏首页python3pythonnet-网络编程(1)

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(社区版免费)运行试试看,我们下次见!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python编程之网络基础

    1 套接字是一种具有通讯端点概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须要建立套接字。

    py3study
  • udp/tcp流程

    py3study
  • Cocos网络篇[3.2](3) ——S

        在客户端游戏开发中,使用HTTP进行网络通信的比较少,一般使用的都是Socket进行通信。而HTTP一般用于网页或者网页游戏。

    py3study
  • selec/poll中的读写事件和epoll中的读写事件

    在Linux网络编程中,常常使用select和poll来做事件触发,监听socket的读写状态,然后进行读写操作。现在新的linux内核中,增加了epoll事件...

    李海彬
  • python编程之网络基础

    1 套接字是一种具有通讯端点概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必须要建立套接字。

    py3study
  • Python套接字

    Python只支持AF_UNIX(基于文件)、AF_NETLINK(使用标准的BSD套接字接口进行用户级别和内核级别代码之间的IPC)、AF_TIPC(透明的进...

    用户4845306
  • 套接字

    版权声明:本文为博主原创文章,转载请注明博客地址: https://blog.csdn.ne...

    zy010101
  • 进程间通信的历史与未来

    - START - 我们都知道线程是共享内存空间的,因此不会发生所谓的通信,而进程则存在如何防止多进程同时访问数据的排他控制问题。 5 种进程间通信的方式 ? ...

    临书
  • unix网络编程——TCP套接字编程

      TCP客户端和服务端所需的基本套接字。服务器先启动,之后的某个时刻客户端启动并试图连接到服务器。之后客户端向服务器发送请求,服务器处理请求,并给客户端一个响...

    Mister24
  • Python Socket 编程详细介绍(转)

    套接字格式:socket(family, type[,protocal]) 使用给定的套接族,套接字类型,协议编号(默认为0)来创建套接字

    超蛋lhy

扫码关注云+社区

领取腾讯云代金券