py知识(每日更新) 7.16

Posted lyoko1996

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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流发出去.

以上是关于py知识(每日更新) 7.16的主要内容,如果未能解决你的问题,请参考以下文章

py知识(每日更新) 8.2

py知识(每日更新) 7.1

py知识(每日更新) 7.12

py知识(每日更新) 7.2

py知识(每日更新) 8.5

py知识(每日更新) 6.13