虚拟环境
python虚拟环境:允许安装不同版本的套件
- 创建:mkvirtualenv 虚拟环境名称 默认python版本2.7
-进入:workon 虚拟环境名称 - 查看所有虚拟环境名称:workon+回车
- 删除:1)先退出虚拟环境 2)rmvirtualenv 虚拟环境名称
- 退出:deactivate
- 创建虚拟环境,指定python路径:mkvirtualenv -p /usr/bin/python3.6 XXX
- 在虚拟环境中安装套件:pip install 套件名==版本
Linux命令(ping、ifconfig)
虚拟机联网方式:
- NAT 虚拟机跟物理主机公用网络
- 桥接 :虚拟机能够获取局域网的IP地址(同学之间互相访问)
- ifconfig:查看IP地址
- ping:检测某个主机是否建立连接
端口
- 分类:知名端口、动态端口
知名端口 0-1023 固定不变,用户也不能用
21 FTP服务
22 SSH服务
80 web服务器
动态端口 1024-65535 程序可以绑定 - 端口查看 netstat
- 查看所有:netstat -an
- 搜索某一个端口:netstat -an | grep :22
- 查看某个端口,是哪个程序使用:sudo lsof -i :22
网络传输方式
面向无连接
- 两台计算机通信的时候,不需要建立连接(逻辑)就可以进行数据的收发,数据可能会丢失
- 传输协议:UDP
面向有连接
- 两台计算机通信的时候,需要先建立连接,再能通信
- 传输协议:TCP
socket 简介
socket网络通信的基本单元,提供的方法可以实现数据的发送和接收
创建套接字
# 1.导入模块 socket
import socket
# 2.创建套接字,使用IPV4 UDP方式
# socket.socket(协议类型,传输方式)
# 参数一:
# socket.AF_INET 使用IPv4
# socket.AF_INET 使用IPv6
# 参数二;
# socket.SOCK_DGRAM 使用UDP的传输方式(无连接)
# socket.SOCK_STREAM 使用TCP的传输方式(有链接)
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 3.数据的传递
# 4.关闭套接字
udp_socket.close()
udp网络程序-发送数据
思路:
1)导入模块
import socket
2)创建套接字
socket.AF_INET #IPv4
socket.SOCK_DGRAM #UDP
udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
3)发送数据
udp_socket.sendto(数据,IP和端口)
- 数据必须是二进制格式,字符串.encode()
- IP和端口必须是元祖,(“IP地址”,端口号)
4)关闭连接
udp_socket.close()
win系统需要开启网路调试助手 - 设置协议方式UDP
- 设置IP地址
- 设置端口
- 连接网络
udp网络程序-发送并接收数据
1)发送数据,同上
2)接收数据
- recv_data = udp_socket.recvfrom(1024) 每次接收1024个字节
- recv_data是一个元组
- 1.第一个元素 收到的数据的二进制
- 2.第二个元素 元组,发送方的IP和端口
- 把接收的数据解码 二进制–》字符串 二进制数据.decode(‘gbk’)
udp绑定端口-发送端
核心方法:bind()
# 绑定端口
# udp_socket.bind(address)
# address是一个元组,元组的第一个元素是字符串类型的IP地址,第二个元素是整形的端口号
udp_socket.bind(('',8881))
绑定,必须绑定自己的地址,也可忽略
udp绑定端口-接收端
bind()
- udp_socket.bind(’’,8888)
- ip地址尽可能写为‘’,好处当计算机有多个网卡的时候,不同网卡的数据都能被接收
UDP广播
广播地址:xxx.xxx.xxx.255 或者255.255.255.255
思路:
- 导入模块
import socket - 创建套接字
udp_socket = socket.socket(socket.AF_INET,socket.SOCKET_DGRAM) - 设置广播权限
#PermissionError:[Error 13] Permission denied
#udp_socket.setsockopt(套接字,属性,属性值)
#socket.SOL_SOCKET 当前的套接字
#socket.SO_BROADCAST 广播属性
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,true)
- 发送数据
udp_socket.sendto('哈哈'.encode(),('255.255.255.255',8080))
- 关闭套接字
udp_socket.close()