py知识(每日更新) 7.16

socket套接字

五层协议:从传输层包括传输层以下,都是操作系统版主我们封装的各种head

套接字:他存在于传输层与应用层之间的抽象层

? 1.避免你学习各层的接口以及协议的使用 socket已经封装好了所有的接口.直接使用这这些接口或者方法即可,提升开发效率.

? 2.在Python中socket就是一个模块.通过调用模块中已经实现的方法建立两个进程之间的通信.

单个客户端通讯

# client端
import socket
# 1. 创建socket对象
phone = socket.socket() # 可以默认不写
# 连接服务器ip地址与端口
phone.connect(('127.0.0.1', 8848))
# 发消息
to_server = input('>>>').strip()
phone.send(to_server.encode('utf-8'))
# 接收消息
from_server_data = phone.recv(1024)  # 夯住,等待服务端的数据传过来
print(f'来自服务端消息:{from_server_data.decode("utf-8")}')
# 关机
phone.close()
# server端
import socket
# phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 1. 创建socket对象
phone = socket.socket() # 可以默认不写
# 2. 绑定ip地址和端口
phone.bind(('127.0.0.1', 8848))  # 本地回环地址
# 3. 监听
phone.listen(5)
# 4. 接收连接
# print('start')
conn, addr = phone.accept()  # 程序夯住
# print(conn,addr)
from_client_data = conn.recv(1024)  # 至多接收1024个字节
print(f'来自客户端{addr}消息{from_client_data.decode("utf-8")}')
to_client = input('>>>')
conn.send(to_client.encode('utf-8'))
conn.close()
phone.close()

通讯循环

# client
import socket
# 1. 创建socket对象
phone = socket.socket() # 可以默认不写
# 连接服务器ip地址与端口
phone.connect(('127.0.0.1', 8888))
# 发消息
while 1:
    to_server = input('>>>').strip()
    if to_server.upper() == 'Q':
        phone.send('q'.encode('utf-8'))
        break
    phone.send(to_server.encode('utf-8'))
    # 接收消息
    from_server_data = phone.recv(1024)  # 夯住,等待服务端的数据传过来
    print(f'来自服务端消息:{from_server_data.decode("utf-8")}')
# 关机
phone.close()
# server
import socket
phone = socket.socket()
phone.bind(('127.0.0.1', 8888))
phone.listen(5)   # 最大连接数
# 4. 接收连接
while 1:
    print('start')
    conn, addr = phone.accept()  # 程序夯住
    print(conn, addr)
    while 1:
        try:
            from_client_data = conn.recv(1024)  # 至多接收1024个字节
            if from_client_data == b'q':
                break
            print(f'来自客户端{addr}消息{from_client_data.decode("utf-8")}')
            to_client = input('>>>')
            conn.send(to_client.encode('utf-8'))
        except ConnectionResetError:
            break
    conn.close()
phone.close()

执行远端命令

# client
import socket
phone = socket.socket()
phone.connect(('127.0.0.1', 8888))
# 发消息
while 1:
    cmd = input('>>>').strip()
    phone.send(cmd.encode('utf-8'))
    # 接收消息
    result = phone.recv(1024)  # 夯住,等待服务端的数据传过来
    print(result.decode('gbk'))
# 关机
phone.close()
# server
import socket
import subprocess
phone = socket.socket()
phone.bind(('127.0.0.1', 8888))
phone.listen(5)
# 4. 接收连接
print('start')
conn, addr = phone.accept()
while 1:
    try:
        cmd = conn.recv(1024) #  dir
        obj = subprocess.Popen(cmd.decode('utf-8'),
                               shell=True,
                               stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE,
                               )

        result = obj.stdout.read() + obj.stderr.read()
        conn.send(result)
    except ConnectionResetError:
        break
conn.close()
phone.close()

网络协议梳理

# 应用层: 软件自定制协议.FTP,HTTP.
    你形成了一个数据: '今天聚餐,别迟到'
    数据size, md5这两个参数组成了报头head
    飞信: data = {'size': 22, 'md5': 'e4rrewr345345643' ,'content': '今天聚餐,别迟到'}
# 传输层: 端口协议. 封装了端口.确定软件在计算机的位置.
    tcp(端口号: 9000) |data = {'size': 22, 'md5': 'e4rrewr345345643' ,'content': '今天聚餐,别迟到'}
# 网络层: ip协议.
    IP协议(源ip地址, 目标ip地址)|tcp(端口号: 9000) |data = {'size': 22, 'md5': 'e4rrewr345345643' ,'content': '今天聚餐,别迟到'}
# 数据链路层: 以太网协议. mac地址
    以太网协议(源mac地址,目标mac地址 数据类型)|IP协议(源ip地址, 目标ip地址)|tcp(端口号: 9000) |data = {'size': 22, 'md5': 'e4rrewr345345643' ,'content': '今天聚餐,别迟到'}
# 物理层: 转化成bite流发出去.

原文地址:https://www.cnblogs.com/lyoko1996/p/11201842.html

时间: 2024-10-10 18:04:13

py知识(每日更新) 7.16的相关文章

py知识(每日更新) 7.30

sql语句的分类 sql语句的分类 # DDL : CREATE ALTER DROP # DML : SELECT INSERT DELETE UPDATE # DCL : GRANT REVOKE 常用sql语句 # 库 # create database 库名; # use 库名 # show tables; # 表 # create table 表名(字段名 类型(长度),...); # desc 表名; # show create table 表名; # alter table 表名

py知识(每日更新) 6.18

万能传参 #当给函数传入的参数数目不定时,之前的穿饭餐方式解决不了问题 #万能参数//动态参数*args 将实参角度: 定义一个函数时* 所有位置参数聚合到一个元祖中. # **kwargs 函数定义是:**讲实参角度所有的关键字参数聚合成一个字典 * 的魔性用法: def func(*args,**kwargs): print(args) print(kwatgs) l1 = [1,2,3] l2 = ["阿萨德","去去去"] 函数形参角度的形参顺序 位置参数&

py知识(每日更新) 7.1

包的使用 第一类: ? 执行文件 通过import导入包以及包内的功能 ? 创建一个aaa的包,自行创建一个__init__py文件 ? 创建一个包会发生三件事儿: ? 1.将以XXX包内的__init__py文件加载到内存中 ? 2.创建一个以XXX命名的名称空间. ? 3.通过XXX . 的当时引用__init__的所有的名字. import aaa # 如何在当前文件中,引用aaa包的bbb包? 1.在执行文件写入 import aaa 2. aaa的__init__ 里面写 from a

py知识(每日更新) 7.15

C/S B/S架构 C:client 客户端 B:Browers 浏览器 S:Service 服务端 C/S 客户端与服务器之间的架构 :QQ 微信 APP等 都属于C/S架构 ? 优点:安全性高,个性化设置,功能全面,相应速度快 ? 缺点:开发成本高,维护成本高,面向客户固定 B/S架构属于C/S架构, 浏览器-服务器之间的架构 ? 优点:开发维护成本低,面向用户广泛 ? 缺点: 安全性相对低,响应速度相对较慢,个性化设置单一 互联网通讯的原理 ISO七层协议(五层) ? 1.物理层:一系列的

py知识(每日更新) 8.9

Title 内容回顾 块级标签 排版标签 p,div,hrp块的上下有一些空白hr是一条线div是没有任何效果的块标签 列表 ol,ul,dlul li type:disc square circle noneol li type:a A I 1 i start:2dl dt dd 表格 tablethead :tr表示行 th表示cell /*可有可无*/tbody :tr表示行 td表示cell border边框的线宽 cellpadding和内容的距离 cellspacing和外边框的距离

py知识(每日更新) 6.5

1整数 int 计算和比较 a.bit_length() #求十进制数转换为二进制时所占用的位数 2布尔值 bool True 真 False 假 数字转成布尔值: 0 False 非0 True 字符串转换成布尔值: 空字符串 "" False 非空 True 布尔值转换成数字 True = 1 False = 0 布尔值转换成字符串 True = str(True) False = str(False) 3字符串 作用:存储少量数据 索引(下标):从左向右 0, 1, 2, 3;;

py知识(每日更新) 6.13

文件操作初识 f = open("文件",mode="模式",encoding="编码") open() #调用操作系统打开文件 mode #对文件的操作方式 encoding #文件的编码 ? #不写indocing 默认为系统编码 Windows--gbk ? #linux&mac ----utf-8 f 文件句柄 ---- 操作文件的锅把 文件操作怎么用? 读 r rb r+ r+b r 读 r+ 读写 #后期开发中使用频率比较低

py知识(每日更新) 7.2

collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict.namedtuple和OrderedDict等. 1.namedtuple: 生成可以使用名字来访问元素内容的tuple 2.deque: 双端队列,可以快速的从另外一侧追加和推出对象 3.Counter: 计数器,主要用来计数 4.OrderedDict: 有序字典 5.defaultdict:

py知识(每日更新) 7.12

反射 通过字符串去操作一个对象 字符串: 字符串类型 对象: 实例,类,当前文件(模块),其他模块 hasattr() # getattr() # setattr() # 增 delattr() # 删 函数VS方法 1.通过函数名可以大致判断 print(func) print(obj.func) 2.通过模块types模块去验证 from types import FunctionType from types import MethodType print(isinstance(func,