设为首页 加入收藏

TOP

python网络编程-1(二)
2019-09-30 16:43:01 】 浏览:49
Tags:python 网络编程
S1.bind((
'127.0.0.1', 8080)) S1.listen(5) while 1: conn, addr = S1.accept() while 1: cmd1 = conn.recv(1024).decode('utf-8') if cmd1 == b'bye': break msg = subprocess.getoutput(cmd1) conn.send(msg.encode('utf-8')) conn.close() S1.close() ######################################################################################## import socket C1 = socket.socket() C1.connect(('127.0.0.1', 8080)) while 1: cmd1 = input('CMD:') C1.send(cmd1.strip().encode('utf-8')) if cmd1 == 'bye': break S_data = C1.recv(1024) print(S_data.decode('utf-8')) C1.close()

    解决粘包代码 ,接收数据时按照自定义头部大小来接收 (subprocess模块的getoutput方法返回str有长度限制 ,所以还是使用实例化Popen完成获取标准输出标准错误)

import socket
import struct
import subprocess

server1 = socket.socket()
server1.bind(('127.0.0.1', 8080))
server1.listen(5)

while 1:
    conn, addr = server1.accept()
    while 1:
        try:
            client_date = conn.recv(1024)
            obj = subprocess.Popen(client_date.decode('utf-8'),
                                   shell=True,
                                   stdout=subprocess.PIPE,
                                   stderr=subprocess.PIPE)
            ret = obj.stdout.read()  # gbk编码的byte类型
            ret1 = obj.stderr.read()  # gbk编码的byte类型

            date_size = len(ret1 + ret)  # 把标准错误与标准输出全部传给客户端
            print(date_size)

            head = struct.pack('i', date_size)  # 将数据长度压缩为4字节byte

            conn.send(head)

            conn.send(ret + ret1)

        except:
            break

    conn.close()

server1.close()

################################################################################

import socket
import struct

C1 = socket.socket()

C1.connect(('127.0.0.1', 8080))

while 1:
    cmd1 = input('CMD:')

    C1.send(cmd1.strip().encode('gbk'))

    if cmd1 == 'bye':
        break

    S_data_size = struct.unpack('i', C1.recv(4))[0]  # 总数据大小

    already_size = 0  # 已经接收数据大小

    S_data = b''  # 接受数据byte拼接

    if S_data_size < 1024:
        S_data = C1.recv(1024)

    else:
        while already_size < S_data_size:
            now_data = C1.recv(1024)
            S_data = S_data + now_data
            already_size += len(now_data)

    print()
    print(S_data.decode('gbk'))

C1.close()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇移动端自动化测试Appium 从入门到.. 下一篇python 基础(实例1——登陆小游..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目