栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

linux,python的补充知识

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

linux,python的补充知识

linux及python的补充知识

一、linux知识

1、ifconfig:查看主机的ip地址2、ping:测试远程主机连通性3、虚拟机网卡设置4、端口 二、python知识

1、编码和解码2、socket简介

2.1、创建socket2.2、socket应用-udp网络程序发送数据2.3、udp网络程序接收数据2.4、udp发送端绑定端口2.5、udp接收端绑定端口 3、udp广播4、udp聊天器

一、linux知识 1、ifconfig:查看主机的ip地址

inet就是ipv4地址,inet6就是ipv6地址

2、ping:测试远程主机连通性

ping用来检测网络是否正常,或者某台主机是否可以连接

3、虚拟机网卡设置
NAT模式虚拟机跟物理主机共用网络
bridged模式虚拟机如同一台真实存在的计算机,会占用真实网段的一个ip,虚拟机能够获取局域网的ip地址
4、端口

linux系统中的端口有65536个!范围为0-65535

端口是怎样分配的?

0-1023是我们不能操控的,1024-635535是我们可以操控的

分配规则分为知名端口和动态端口
知名端口:

知名端口就是众所周知的端口:范围从0-1023

常见协议及端口协议的基本作用
FTP(21)文件上传和下载
SSH(22)安全的远程登录
Telnet(23)远程登录
dns(53)域名解析
http(80)超文本传输
pop3(110)邮件接收
https(443)加密传输的https

动态端口

动态端口的范围为1024-65535
之所以称为动态端口,是因为它一般不固定分配某种服务,而是动态分配,用户也可以修改

netstat:可以用来查看有哪些端口
lsof:可以用来查看占用端口的服务是谁,lsof -i:端口号

二、python知识 1、编码和解码

文本总是unicode,由str类型来表示,二进制数据使用bytes来表示;
网络中数据的传输都是以二进制(字节码)的方式来进行的,所以我们需要通过对unicode字符串内容进行编码和解码才能达到数据传输的目的

在python中:

str-->bytes:encode编码,就是将字符串转换为字节码
bytes-->str:decode解码,就是将字节码转换为字符串


常用的编码方案有utf-8(万国码)和gbk(中文),encode和decode默认使用的就是utf-8
encode()和decode()方法可以接收参数

bytes.decode(encoding="utf-8",errors="strict")
str.encode(encoding="utf-8",errors="ignore")
errors指错误的处理方案,默认为strict,编码错误就会报错,ignore就是忽略错误
2、socket简介

它能够实现不同主机之间的进程通信,我们网络上各种各样的服务大多数都是基于socket来完成通信的,例如我们每天浏览网页,qq聊天,收发email等。
socket是网络通信的基本单元,提供的方法可以实现数据的发送和接收

2.1、创建socket

在Python中,使用socket模块的socket类就可以

import socket
socket.socket(AddressFamily,Type)

参数一:AdressFamily:地址簇
socket.AF_INET IPv4(默认)
socket.AF_INET6 IPv6
socket.AF_UNIX 只能够用于单一的unix系统进程间的通信
参数二:Type(类型)
socket.SOCK_STREAM 流式socket,for TCP(默认)
socket.SOCK_DGRAM 数据报式socket,for UDP
socket.SOCK_RAW 原始套接字,可以处理icmp,igmp等网络报文
socket.SOCK_SEQPACKET 可靠的连续数据包服务

2.2、socket应用-udp网络程序发送数据

实现代码如下:

#1、导入模块
import socket
# 2、创建套接字,使用ipv4,udp方式
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 3、数据的传递
"""
sendto参数说明
参数1、数据必须是二进制数据,字符串.encode(),转换为二进制
参数2、元组类型,把参数1的数据发送给谁(ip地址字符串,端口数值)
"""
udp_socket.sendto("helloworld!".encode(),("192.168.150.30",8080))
# 4、关闭套接字
udp_socket.close()

效果如下,发送的地址为windows的地址

2.3、udp网络程序接收数据
import socket
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#recvfrom(1024):从套接字中接收1024字节的数据,此方法会造成程序的阻塞
#如果对方发送了数据,recvfrom会自动接触阻塞,如果没有发送数据,会一直等待
recv_data=udp_socket.recvfrom(1024)
recv_text=recv_data[0].decode()
print("来自:",recv_data[1],"的消息",recv_text)
2.4、udp发送端绑定端口

在发送和接收信息的时候,端口会一直变化,所以我们需要绑定端口
实现代码如下:

import socket
#创建套接字
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
#绑定端口:udp_socket.bind(adress),adress是一个元组,元组的第一个元素是字符串类型的ip地址,第二个元素是整数端口号
udp_socket.bind(("192.168.150.25",8888)) #这里的IP地址是自己的ip地址
#发送数据
udp_socket.sendto("hello".encode(),("192.168.150.30",8080))
udp_socket.close()

效果如下:

2.5、udp接收端绑定端口
"""
1、导入模块
2、创建套接字
3、绑定端口
4、接收对方发送的数据
5、解码数据
6、输出显示
7、关闭套接字
"""
import socket
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
udp_socket.bind("",6666)#ip可以写为空,默认就是本机ip,如果有多个网卡,会监听所有的网卡
#接收对方发送的数据
recv_data,ip_and_port=udp_socket.recvfrom(1024)
#解码数据并数出显示
print("接收{}的信息{}".format(str(ip_and_port,recv_data.decode())))
udp_socket.close()
3、udp广播

广播地址是专门用于同时向网络中所有工作站进行发送的一个地址,255.255.255.255即是广播地址,所以向255.255.255.255发送消息,就是发送广播消息
实现代码如下:

"""
1、导入模块
2、创建套接字
3、设置广播权限
4、发送数据
5、关闭套接字
"""
# 1、导入模块
import socket
# 2、创建套接字
udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 3、设置广播权限
#套接字默认不允许发送广播,需要开启相关权限
#udp_socket.setsockopt(套接字,属性,属性值)
#socket.SOL_SOCKET当前的套接字,socket.SO_BROADCAST广播属性,默认值为False,要设置为True,为可以发送广播
udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,True)
# 4、发送数据
udp_socket.sendto("hello".encode(),("255.255.255.255",8080))
# 5、关闭套接字
udp_socket.close()

注意:广播地址也可以写某一个网段.255,一个局域网内的主机就会收到消息,需要安装网络助手才能收到消息哦

如若我们不设置广播权限运行代码,就会出现如下错误

4、udp聊天器

说明:

1、在电脑中编写一个程序,实现三个功能
2、获取键盘数据,并将其发送给对方
3、接收数据并且显示
4、退出聊天系统

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/754137.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号