安全矩阵

 找回密码
 立即注册
搜索
楼主: Pluto

李佳瑞学习日记

[复制链接]

7

主题

102

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 6 天前 | 显示全部楼层
import socket
def send_windows_udp():    """向windows 网络调试助手发送数据"""    # 1 创建套接字    # 参数的介绍 socket.AF_INET:ipv4,   socket.SOCK_DGRAM:udp    socket_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 准备发送的内容和地址
# 注意windows的网络调试助手接收的编码类型为gbk
send_data = '我第一次发送数据!!!!!'.encode('gbk')

# 必须是元祖 前面的是ip 后面的是port
address = ('192.168.1.11', 9999)

# 2 发送数据
socket_udp.sendto(send_data, address)

# 3 接收数据

# 4 关闭套接字
socket_udp.close()
def send_ubuntu_udp():    """向ubuntu 网络调试助手发送数据"""    # 1 创建套接字    # 参数的介绍 socket.AF_INET:ipv4,   socket.SOCK_DGRAM:udp    socket_udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 准备发送的内容和地址
# 注意ubuntu的网络调试助手接收的编码类型为utf-8
send_data = '我第一次发送数据!!!!!'.encode('utf-8')

# 必须是元祖 前面的是ip 后面的是port
address = ('192.168.25.140', 22222)

# 2 发送数据
socket_udp.sendto(send_data, address)

# 3 接收数据

# 4 关闭套接字
socket_udp.close()
if name == 'main':    send_ubuntu_udp()

测试数据str->bytesbytes->strstr - >bytestest_str = '我是文本数据'encoding_str = test_str.encode('gbk')print(type(test_str))print('-----------')# 现在的encoding_str是给电脑看的, 我们想要识别必须解码print('encoding_str:%s' % encoding_str)print(type(encoding_str))
bytes_data = b'\xce\xd2\xca\xc7\xce\xc4\xb1\xbe\xca\xfd\xbe\xdd'
解码的方法 decode() 编码和解码的类型必须一致decoding_str = encoding_str.decode('gbk')print('decoding_str:%s' % decoding_str)
decode_str = bytes_data.decode('gbk')print('bytes_data:%s' % bytes_data)print('-----')print(decode_str)

使用socket 发送和接收数据
from socket import *
创建套接字
socket_udp = socket(AF_INET, SOCK_DGRAM)
准备数据
data = "第二次发送的udp数据".encode('gbk')address = ('192.168.1.11', 9999)
可以指定端口、也可以不指定如果不绑定端口,操作系统会随机分配一个,如果重新运行它的端口会发生改变如果绑定成功操作系统不会帮我们去分配会使用我们指定的
socket_udp.bind(('', 12345))  # ip一般我们不指定,表示电脑的任意一个ip都行
发送数据
socket_udp.sendto(data, address)
接收数据 接收数据的时候可以指定接收数据的大小 4096recv_data,  ip_pot = socket_udp.recvfrom(4096)  # 接收数据的方式拆包print(recv_data.decode('gbk'))print(ip_pot)
recv_data = socket_udp.recvfrom(4096)[0].decode('gbk')ip_pot = socket_udp.recvfrom(4096)[1]print(recv_data)print(ip_pot)
关闭套接字
socket_udp.close()


在网络通信过程中 为什么用ip和port为了能够将一个复杂的通信过程进行任务划分, 从而保证数据准确的传递
"""
  • 在一个电脑中编写1个程序,有2个功能
  • 1.获取键盘数据input,并将其发送给对方 send_to
  • 2.接收数据并显示 recvfrom
  • 并且功能数据进行选择以上的2个功能调用"""

from socket import *
def send_data(socket_udp):    """发送数据的函数"""    data = input('请输入您要发送的内容').encode('gbk')    address = ('192.168.1.11', 9999)    socket_udp.sendto(data, address)
def recv_data(socket_udp):    """接收数据的函数"""    recv_data, ip_port = socket_udp.recvfrom(4096)  # 接收数据的方式拆包    print(recv_data.decode('gbk'), ip_port)
def run():    socket_udp = socket(AF_INET, SOCK_DGRAM)    # 不绑定端口,程序找不到会报错    socket_udp.bind(('', 54321))    while True:        print('=' * 20)        print('1:发送数据')        print('2:接收数据')        print('=' * 20)        num = input('请输入您的选择序号')        if num == '1':            # 执行发送数据的任务            send_data(socket_udp)        elif num == '2':            # 接收数据并显示            recv_data(socket_udp)        else:            print('输入错误')            break
if name == 'main':    run()

回复

使用道具 举报

7

主题

102

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 5 天前 | 显示全部楼层
今天复习了一下 python的类的方法
旧/经典 不推荐格式class 类名:passclass Person:"""我是经典的类"""pass新式类class Person(object):pass创建了一个对象person = Person()  # 对象名 = 类名()创建并且调用类的方法和属性
  1. class Dog(object):
  2.     """狗的一个类"""
  3. # 类的属性
  4. # name = '大黄狗'
  5. # age = 2

  6. def eat(self):
  7.     """类里面的方法"""
  8.     print('会吃')

  9. def info(self):
  10.     """打印对象信息的方法"""
  11.     print('名字:%s, 年龄:%s' % (self.name, self.age))
复制代码
# 创建对象dog = Dog()# 通过对象调用方法, 类里面的方法只有创建了对象才能调用dog.eat()查看类的属性print(dog.name)动态的添加属性 当程序云心的时候添加叫动态添加dog.age = 3print(dog.age)通过方法获得属性通过方法去获取属性dog.name = '旺财'dog.age = 3dog.info()一个类可以创建多个对象 根据实际需求创建
  1. <font size="3">wangcai = Dog()  # 创建名字为旺财的对象
  2. wangcai.name = '旺财'
  3. wangcai.age = 3
  4. wangcai.info()
  5. print('--分割线--')
  6. xiaoqiang = Dog()  # 创建名字为小强的对象
  7. xiaoqiang.name = "小强"
  8. xiaoqiang.age = 2
  9. xiaoqiang.info()</font>

复制代码

self的介绍和使用
  1. class Cat(object):
  2.     """关于毛的一个类"""
  3. name = '大猫'  # 属性

  4. def eat(self):  # 方法
  5.     print('%s的年龄是%s岁' % (self.name, self.age))
  6.     # print('%s的年龄是%s岁' % (cat2.name, cat2.age))
  7. <font size="3">cat = Cat()</font>
复制代码
修改属性(扩展)
  1. cat.name = "小猫"  # 对象.属性 =  你要修改的值
  2. cat.age = 3
  3. cat.eat()
  4. print('============')
  5. cat2 = Cat()
  6. cat2.age = 2
  7. cat2.eat()
复制代码



回复

使用道具 举报

7

主题

102

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 4 天前 | 显示全部楼层
init  方法
  1. class Cat(object):
  2. #  属性

  3. def __init__(self, name, age):
  4.     """魔法方法_初始化方法,只要创建对象就被调用"""
  5.     self.name = name
  6.     self.age = age

  7. def eat(self):
  8.     print('名字为:%s,年龄为:%s的猫在吃东西' % (self.name, self.age))
复制代码
创建对象,
  1. cat = Cat('小猫', 1)
  2. print(cat)
复制代码
str方法 对象的描述的方法
  1. class Cat(object):
  2.     """关于猫的类"""
复制代码
  1. def __init__(self, name, age):
  2.     """初始化方法"""
  3.     self.name = name
  4.     self.age = age

  5. def drink(self):
  6.     """喝水的方法"""
  7.     print('喝水的方法:名字:%s 年龄:%s' % (self.name, self.age))

  8. def __str__(self):
  9.     """__str__方法, 返回的是一个字符串,
  10.     只要在类里面定义了此方法那么它的返回值就是类的描述
  11.     如果不定义此方法那么就会返回类的<__main__.Cat object at 0x00A1F700>"""
  12.     return '关于猫的类,名字:%s 年龄:%s' % (self.name, self.age)

  13. def eat(self):
  14.     """吃的方法"""
  15.     print('吃饭的方法:名字:%s 年龄:%s' % (self.name, self.age))
复制代码
创建对象补存:类里面的方法执行的顺序是根据调用的顺序执行的,和定义的顺序无关
  1. cat = Cat("小猫", 2)
  2. print(cat)
  3. cat.eat()
  4. cat.drink()

复制代码





回复

使用道具 举报

7

主题

102

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 3 天前 | 显示全部楼层
js 中的event
  1. //  事件函数 : 事件对象、事件发生 - 过程(函数)-> event
  2.                 window.onload = function(ev) {
  3.                        
  4.                         alert(ev);
复制代码
//                                如果一个函数是被事件调用的那么,这个函数定义的第一个参数就是事件对象
  1.                         // 点击事件
  2.                 var btn = document.getElementById('btn');
  3.                 btn.onclick = function(ev) {  // 事件函数
  4.                        
  5.                         var ev = ev || event;
复制代码
  1.         alert("a");
  2.                 //  注意:事件对象、事件一般与函数连用,才有效果
  3.                        // 2、 event : 事件对象 必须在事件调用函数中才有内容;
  4.                 }
  5.                
  6.                         //  ie/谷歌中 : ev
  7.                         // 其他浏览器中 : event
复制代码
  1.         }
  2.                 //  函数的调用;
  3.                 sub();
  4.                
  5.         */       
复制代码
  1.         function fn1(ev) {
  2.                
  3.                 var ev = ev || event;
复制代码
  1. // 输出 事件对象内容
复制代码
//                        for(var attr in ev) {//                                //                                //                                console.log(attr + '=' + ev[attr]);//                        }//                                                alert(ev.clientX);                       

  1. }
  2.         // 事件函数
  3. document.onclick = fn1;
复制代码
  1. </script>
  2. </head>
  3. <body>
  4.         <input type="button" id="btn" value="按钮" />
  5. </body>
复制代码

回复

使用道具 举报

7

主题

102

帖子

404

积分

中级会员

Rank: 3Rank: 3

积分
404
 楼主| 发表于 前天 22:51 | 显示全部楼层
#json

  json是一种数据格式,支持简单值,对象和数组,
  json中的所有的文本都需要用双引号引起来
  json 不支持函数

  js中的对象是无序属性的集合

  json数据的状态:
          序列化:把无序变成有序的状态   JSON.stringify()
          反序列化:把有序的变成无序的    JSON.parse()

          序列化选项:
                  JSON.stringify(a,b,c);

                  b=>array,制定序列化json数据中的哪几项
                  c=>string || number(<=10)  制定返回的数据以缩进的格式来显示

          反序列化选项:

                  JSON.parse(a,callback);
                  callback=>回掉函数,指定反序列化时候对json数据的处理例如:
  1. let obj={
  2.                 str:"str",
  3.                 num:1990,
  4.                 boo:false,
  5.                 nu:null,
  6.                 un:undefined,
  7.                 "o":{
  8.                         "name":"lisi"
  9.                 },
  10.                 a:["h","e"],
  11.                 func:function(){

  12.                 }
  13.         }

  14.         let str=JSON.stringify(obj,["o","name"],10);

  15.         console.log(str);
复制代码
  1. // let str=`{
  2.         //         "name":"xiaoli",
  3.         //         "birth":"1997-5-5"
  4.         // }`;

  5.         // let obj=JSON.parse(str,function(key,value){

  6.         //         return key=="birth"
  7.         //                         ? new Date(value)
  8.         //                         : value;
  9.                
  10.         // });

  11.         // console.log(obj.birth.getFullYear());
复制代码
  1.   // eval("console.log(11)");
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2020-5-27 04:27 , Processed in 0.011581 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表