#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time : 2018/6/2 18:29
# @Author : chen
# @File : 客户端.py
import json
import socket
import struct
phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
phone.connect(('127.0.0.1', 9901)) # 客户端这里是用connect。服务端是用bind
while True:
# 1、发命令
cmd = input('>>: ').strip() # ls /etc
if not cmd: continue
phone.send(cmd.encode('utf-8')) # send属于应用层,将数据拷贝给操作系统send操作就结束了
# send 操作是将应用程序的数据从内存拷贝到系统
# 然后由系统传给网卡
# 所以send操作比recv耗时短
# 2、拿命令的结果,并打印
# 第一步:先接收报头的长度
obj = phone.recv(4) # 1024是一个坑 recv也是调用网卡设备
header_size = struct.unpack('i', obj)[0]
# 第二步:再接收报头
header_bytes = phone.recv(header_size)
# 第三步:从报头中解析出对真实数据的描述信息
header_json = header_bytes.decode('utf-8')
header_dic = json.loads(header_json)
print(header_dic)
total_size = header_dic['total_size']
# 第四补:接收真实数据
recv_size = 0
recv_data = b''
while recv_size < total_size:
res = phone.recv(1024)
recv_data += res
recv_size += len(res)
print(recv_data.decode('gbk'))
phone.close()
模拟ssh远程socket编程粘包问题_客户端
最新推荐文章于 2022-03-05 12:02:22 发布