2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Python中虚拟环境与网络IP地址 端口 socket套接字【详细】

Python中虚拟环境与网络IP地址 端口 socket套接字【详细】

时间:2018-10-02 19:55:10

相关推荐

Python中虚拟环境与网络IP地址 端口 socket套接字【详细】

🍒 作者简介:大学机械本科,野生程序猿,学过C语言,玩过前端,还鼓捣过嵌入式,设计也会一点点,不过如今痴迷于网络爬虫,因此现深耕Python、数据库、seienium、JS逆向、安卓逆向等等,,目前为全职爬虫工程师,学习的过程喜欢记录,目前已经写下15W字电子笔记,因此你看到了下面这篇文章~

🍒 技术栈:Python、HTML、CSS、JavaScript、C、Xpath语法、正则、、MySQL、Redis、MongoDB、Scrapy、Pyspider、Fiddler、Mitmproxy、分布式爬虫、JAVA等

🍒个人博客:https://pythonlamb.github.io/

🍒大学作品合集:/h9M2jX

🍒欢迎点赞⭐️收藏🐐关注🍑留言呀🍇

🐐 登高必自卑,行远必自迩.

🍇 我始终坚信越努力越幸运

⭐️ 那些打不倒我们的终将会让我们变得强大

🍑 希望在编程道路上深耕的小伙伴都会越来越好

文章目录

python虚拟环境网络通信协议IP地址什么是IP地址?以及其作用?IPV4地址与IPV6地址的区别端口【重点】什么是端口?虚拟端口分为哪几类?常见知名端口作用查看端口指令 —— netstat查看端口被哪个程序占用指令 —— lsof网络数据传输方式【重点】网络数据传输的两种方式两种网络数据传输方式的特点socket简介【重点】什么是 socket 套接字python/pycharm中怎么创建一个 socket 对象进行数据收发 ?利用socket套接字发送数据【重点】网络调试助手(Netassist)的作用 windows版本socket套接字的 sendto 方法向网络调试助手发送数据socket套接字接收数据【重点】socket 套接字的 recvfrom 方法接收数据Python3编码转换【重点】python3的编码与解码在解码失败的情况下的处理方法发送数据端(ubuntu系统)的端口绑定【重点】接收数据端的端口绑定【重点】

python虚拟环境

目标:

1:知道在Linux中什么是虚拟环境?

2:虚拟环境的作用是什么?

3:掌握怎么配置虚拟环境

4:掌握怎么进入、退出、删除虚拟环境

5:掌握如何查看所有的虚拟环境

6:掌握如何在 pycharm 配置虚拟环境

一:Linux中什么是虚拟环境?

虚拟环境就是在Linux(服务器)中开辟多个虚拟空间,每个虚拟空间内可存放独立的东西(软件、库),且每个虚拟环境之间互不影响!

二:虚拟环境的作用(图示)

三:怎么在Linux(服务器)配置搭建虚拟环境

第一步:在Linux终端安装虚拟环境指令

sudo pip3 install virtualenvsudo pip3 install virtualenvwrapper

第二步:创建虚拟环境

语法:

不指定python版本:mkvirtualenv 虚拟环境名称 例如 mkvirtualenv py-vir (其中 py-vir是虚拟环境名称)

指定python版本:mkvirtualenv -p python3版本路径 虚拟环境名称 例如 mkvirtualenv -p /home/lamb/python3 work1

注意事项:

1:创建虚拟环境时,如果不指定python版本,默认创建 pytho2 版本的虚拟环境

2:创建虚拟环境需要联网

3:创建完虚拟环境后,会自动工作在这个虚拟环境下

4:按住快捷键 Ctrl + h 可显示目录下的隐藏文件

快速代码体验(不指定python版本)

指定python版本

四:怎么进入、退出、删除虚拟环境

进入虚拟环境语法:workon 虚拟环境名称

退出虚拟环境语法:deactivate

删除虚拟环境语法:rmvirtualenv 虚拟环境名称

五:如何查看Linux服务器内的所有虚拟环境

答:利用 workon 即可查看所有虚拟环境

快速代码体验:

六:怎么在 pycharm 使用(配置)已经创建好的虚拟环境呢?

网络通信协议

一:什么是网络?

答:网络就是一些相互连接、以资源共享为目的的计算机集合,使用网络可以把多方连接在一起,从而进行数据传递

二:网络编程是什么?有什么用?

答:网络编程可以在不同电脑上的软件进行数据传递,作用是传递数据

IP地址

什么是IP地址?以及其作用?

什么是IP地址:IP地址是指网络协议地址,在互联网上每一台电脑都有 IP 地址,即给每一台电脑进行编号,把个人电脑比作电话的话,IP地址就相当于电话号码

IP地址作用是什么:用来给网络上的计算机进行标记,是网络为计算机分配的唯一标识(唯一性,不重复)

注意事项:

1:IP地址由两部分组成,xxx.xxx.xxx是网络号,后面那部分是主机号取值范围是0~255,例如192.168.1.42的192.168.1是网络号,42是主机号,如果公司内计算机比较多,主机号就为最后两段即 1.42,以此类推

2:xxx.xxx.xxx.0 IP地址是不可用的(内部地址)

3:xxx.xxx.xxx.255 IP地址也是不可用的(广播地址)

4:理论上来说一个网段支持256个计算机的IP地址,但是除去上面两个IP地址,只能有254个计算机IP地址

5:特殊的IP地址 127.0.0.1,即没有网络的时候计算机IP地址(本机地址)

6:如果说两个IP地址是在同一个网段下,就说明这两个IP地址是同一个网络号!

快速截图

IPV4地址与IPV6地址的区别

IPV4:xxx.xxx.xxx.xxx 点分十进制

IPV6:xxx:xxx:xxx:xxx…. 冒号分十六进制

端口【重点】

什么是端口?

答:端口可以认为设备与外界通讯交流的出口,我认为是程序对外收发数据的出口,端口可分为物理端口(usb接口等)与虚拟端口

图示1

图示2

虚拟端口分为哪几类?

答:虚拟端口分为两类分别是知名端口以及动态端口

注意事项:

1:计算机上端口有65536个(2的16次方),为了管理方便将每个端口进行编号即为端口号,端口号范围0~65535

2:端口号01023是知名端口,不允许个人使用,102465535是动态端口,允许个人使用

常见知名端口作用

图示

查看端口指令 —— netstat

功能:查看计算机上已连接的端口

语法:netstat

指令选项:

-an :查看计算机上所有已连接端口的状态,可配合管道指令 | 与查找指令 grep 使用

例如 netstat -an | gerp :22 作用是查找22端口的状态

快速代码体验(无选项)

有-an选项

配合管道指令与查找指令使用

查看端口被哪个程序占用指令 —— lsof

功能:查看某一个端口是否被占用,占用的程序是什么

语法:sudo lsof -i 端口号

注意事项:

1:lsof指令必须配合 sudo指令 以及 -i 选项使用,否则指令不能正常执行

2:端口号是数字加上冒号,例如22端口号为 :22

快速代码体验

网络数据传输方式【重点】

导读:为什么要有数据传输方式

网络数据传输的两种方式

面向无连接型(UDP):两台计算机在传输数据的时候,不需要事先建立连接,发送数据方可以随时随地发送数据,收数据方也不知道自己什么时候会收到数据比如说学校在喇叭上通知事情

面向有连接型(TCP):两台计算机在传输数据的时候需要先建立连接线路,线路建立成功才可以进行发送数据,例如管道运输液体等(液体为数据)

两种网络数据传输方式的特点

UDP:面向无连接性不提供复杂的控制机制,在发送数据的时候如果出现丢包的情况,不负责重发数据,并且数据出现包顺序错杂的时候也不负责纠正过来,因此UDP传输数据简单高效,数据传输速度快

应用范围:

1:即时通信,网络直播、视频、音频直播

2:包总量较少的通信(DNS)

3:广播通信

TCP:面向有连接型数据传输方式在传输数据之前要建立一条数据通信线路,线路建立成功才发送数据,因此TCP数据传输在丢包时可重发数据包,还可以控制数据包的顺序,是可靠的数据传输方式

socket简介【重点】

什么是 socket 套接字

答:socket 套接字是支持 TCP\UDP 网络通信的基本通信单元,可以看做两台主机进行双向通信的端点,也可以认为是网络数据传输的快递员,socket最早起源于Unix

socket 套接字图示

socket 套接字工作模型

python/pycharm中怎么创建一个 socket 对象进行数据收发 ?

答:导入 socket 模块,使用 socket 模块中的 socket 类即可创建一个 socket 对象从而进行数据收发

语法:

import socket # 导入 socket 模块socket_object = socket.socket(网络协议地址 , 传输方式) # 用 socket 类创建一个 socket_object 对象数据收发步骤省略…… # 收发数据代码省略socket_object . close( ) # 关闭这个 socket_object 套接字对象

注意事项:

1:使用 socket 类实例化对象要有两个参数 分别是 Addressfamily(网络协议地址) 与 Type(数据传输方式)

2:Addressfamily参数代表地址簇,即通信的IP地址,Addressfamily参数有两个常用值即 socket.AF_INET与socket.AF_INET6,其中socket.AF_INET代表IPV4地址,socket.AF_INET6代表IPV6的地址

3:Type参数代表数据传输方式,Type参数有两个值,socket.SOCK_STREAM代表以TCP(面向有连接型)数据传输方式进行传输,socket.SOCK_DGRAM参数代表以UDP(面向无连接型)方式进行传输数据

快速代码体验(创建一个socket套接字(IPV4,UDP)进行数据收发)

利用socket套接字发送数据【重点】

网络调试助手(Netassist)的作用 windows版本

答:在Linux系统利用 socket 套接字的 sendto 方法向另外一台计算机发送数据的时候,接收数据的这台计算机需要安装网络调试助手才可以接收Linux系统发送的数据

软件界面

socket套接字的 sendto 方法向网络调试助手发送数据

功能:传输数据

语法:创建的套接字.sendto(“内容”.encode(“gbk” ) , (“IPV4地址”,端口号))

注意事项:

1:利用sendto方法发送数据的时候,发送的数据要是二进制形式

2:sendto方法中发送的内容后面跟上 encode()方法是将发送的数据转换为二进制编码发送

3:sendto方法中的encode(“gbk”)方法括号内的“gbk”是因为向Windows计算机发送数据,所以要填写gbk编码,否则造成文字乱码

4:sendto方法中的IP地址与端口号是保存在一个元组内的,其中 IP 地址是字符串类型,端口号是整形,元组内的数据类型统称为 address 数据类型

快速代码体验

代码截图

windows计算机网络调试助手接收数据结果截图

socket套接字接收数据【重点】

socket 套接字的 recvfrom 方法接收数据

功能:从套接字中接收其他主机发送的数据

语法: 创建的套接字 . recvfrom(1024)

注意事项:

1: recvfrom(1024) 方法中的 1024 代表缓冲区,表示从套接字内接收多少字节的数据,表示最多接收1024个字节的数据

2:利用 recvfrom 接收的数据是一个元组,元组内第一个元素为接收的数据,第二个元素也是一个元组,存储发送数据方的 IP 地址和端口号

3:利用 recvfrom 方法接收的数据是二进制格式的需要用 decode 方法对接收的数据进行解码(解码为字符串)

4:利用 revcfeom 方法接收数据会造成程序的阻塞(程序停止运行),直到接收到数据程序才继续运行,类似于input方法

5:因为接收的是windows主机调试助手的数据,因此利用decode解码数据括号里面要加上“gbk”

6:网络数据传输是以二进制形式进行的

快速代码体验(未将数据解码)

windows端先接收到数据

随后 ubuntu 接收到网络调试助手发送的数据(未解码二进制数据)

将数据解码

windows调试助手先收到ununtu系统发来的数据

调试助手向ubuntu系统发送数据

Python3编码转换【重点】

python3的编码与解码

注意:网络中数据的传输是以二进制的方式进行的

编码:encode(“字符集”)方法,将字符串类型的数据编码为二进制(字节码)的数据

解码:decode(“字符集”)方法,将二进制(字节码)数据解码为字符串类型数据

注意:

1:字符集有常用的两种分别是“gbk”(国标码)与“utf-8”(万国码)

2:ubuntu系统默认编码与解码的字符集为“ utf-8”即 encode()与 decode()默认是以 “utf-8”进行编码和解码的

3:如果编码是以字符集“utf-8”进行的,那么解码也要用字符集“utf-8”进行,否则会出现乱码,解码失败

在解码失败的情况下的处理方法

功能:对接收的数据利用decode(“字符集”)进行解码时出现解码错误,是选择忽略错误还是严格要求错误

语法1(不忽略解码错误):二进制数据 . decode(encoding = “字符集”,errors = “strict”)

语法2(忽略解码错误):二进制数据 . decode(encoding = “字符集” , errors = “ignore”)

快速代码体验(不忽略错误)

调试助手截图(windows)

ubuntu系统接收数据截图

对解码错误进行忽略

调试助手(windows)截图

ubuntu系统接收数据截图

发送数据端(ubuntu系统)的端口绑定【重点】

目标:掌握创建的套接字对象的bind 方法对发送数据方主机的端口进行绑定

应用背景

在 ubuntu 系统中向调试助手发送数据的时候,每一次发送数据,发送数据方(ubuntu)的端口都在发生变化,如下图所示,为了避免这一情况的出现,即可利用 bind 方法对发送数据方的端口进行绑定,从而使发送数据的时候端口不在发生变化

截图

一:发送数据端的端口进行绑定方法 —— bind(address)

功能:将发送数据端主机的端口进行绑定,从而在多次发送数据的时候,端口不会发生变化

语法:套接字对象 . bind(address)

注意事项:

1:bind(address)括号里面的 address 代表地址数据类型(元组),如(“192.168.1.43”,6666)就是对192.168.1.43这个主机 IP 进行端口绑定,绑定的端口是 6666

2:绑定端口时,address地址数据类型里面填写的IP地址是当前主机的IP,可以省略

快速代码体验

ubuntu系统主机代码演示

调试助手接收多条数据的截图(来自同一端口)

接收数据端的端口绑定【重点】

目标:掌握利用 bind 方法对接收数据方的端口进行绑定

注意:接收数据端是ubuntu系统,因为调试助手充当发送数据端的角色

一:接收数据端主机的端口绑定函数—— bind()

功能:对接收数据端主机(ubuntu系统)的端口进行绑定

语法:创建的套接字 . bind(address)

注意事项:

1:address是地址数据类型,是一个元组 ,例如(“192.168.1.43”,8080)就是一个address数据类型,其中第一个元素是主机的IPV4地址,第二个是待绑定的端口号。

2:在利用 bind()方法绑定接收数据方主机端口号时,IPV4地址要写接收数据端的主机IPV4地址!

3:接收数据端的 address 数据类型里面的 ip 地址最好写成空地址“ ”,因为如果计算机有两个网卡,就有两个 ip 地址,如果绑定一个网卡 ip 的话,就会造成另一个网卡接收不到数据,因此写为空,避免造成这种情况

快速代码体验

接受数据端主机代码截图

发送数据端(网络调试助手)截图

接收数据端接收数据截图

未完待续…

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。