【python】-- Socket接收大数据

Socket接收大数据

上一篇博客,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区中,这样就会造成我们想要获取数据的完整性。

解决思路:

1、改大客户端接收的数据的大小,因为官方建议最多只能接收8k的数据,那服务端发送过来的数据很容易就会大于8K,这个思路并不能从根本上解决问题(不建议使用)

2、客户端可以多收几次,服务端给客户端发数据之前,先计算一下要发给客户端数据大小(len()判断文件长度) ,比如说要发给客户端数据是5k大小,先把5K这个值发送给客户端,客户端知道总共会接收5K的值,就知道需要接收多少次了,循环接收,直到5k数据全部接收完毕为止。

逻辑流程图:

服务端代码:

import socket,os

server = socket.socket()
server.bind(("localhost",9999))
server.listen(5)
while True:
    conn,addr = server.accept()
    print("new addr:",addr)
    while True:
        data = conn.recv(1024)
        if not data:
            print("客户端已断开")
            break
        print("执行指令:",data)
        cmd_res = os.popen(data.decode()).read()
        print("before send:",len(cmd_res))
        if len(cmd_res) == 0:
            cmd_res = "cmd has no output...."
        conn.send( str(len(cmd_res.encode())).encode() )  #发送服务端发送给客户端数据的长度
        conn.send(cmd_res.encode("utf-8"))   #发送服务端的数据
        print("send done")
server.close()

客户端代码:

import socket

client = socket.socket()
client.connect(("localhost",9999))

while True:
    cmd = input(">>>:").strip()
    if len(cmd) == 0:continue
    client.send(cmd.encode("utf-8"))
    cmd_res_size = client.recv(1024)  #接收命令的长度
    print("命令结果大小:",cmd_res_size.decode())
    recevied_size  = 0   #接收客户端发来数据的计算器
    recevied_data = b‘‘  #客户端每次发来内容的计数器
    while recevied_size < int(cmd_res_size.decode()):  #当接收的数据大小 小于 客户端发来的数据
        cmd_res = client.recv(1024)
        recevied_size += len(cmd_res)  #每次收到的服务端的数据有可能小于1024,所以必须用len判断
        recevied_data += cmd_res
    else:
        print(recevied_data.decode("utf-8","ignore"))
        print("cmd res receive done ....",recevied_size)

client.close()
时间: 2024-08-09 06:26:06

【python】-- Socket接收大数据的相关文章

Socket接收大数据的方法

1 byte[] buffer = new byte[BufferSize]; 2 int bytesRead; // 读取的字节数 3 MemoryStream msStream = new MemoryStream(); 4 do { 5 bytesRead = streamToClient.Read(buffer, 0, BufferSize); 6 msStream.Write(buffer, 0, bytesRead); 7 } while (bytesRead > 0); 8 9 b

php socket接受大数据死循环,接收不全的问题

$per_len = 20000;     //每次读多少字节 $no_read_len = $content_len;  //未读的字节(总字节大小) $str = ''; while($len<$content_len) { $read = socket_read($socket, $per_len,PHP_BINARY_READ); $str .= $read; $len += strlen($read);   //总共读了多少字节 } http://hi.baidu.com/cuttin

用Python实现一个大数据搜索及源代码

在日常生活中,大家了解搜索引擎如百度.360.搜狗.谷歌等,搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理. 布隆过滤器(BloomFilter) 第一步我们先要实现一个布隆过滤器. 布隆过滤器是大数据领域的一个常见算法,它的目的是过滤掉那些不是目标的元素.也就是说如果一个要搜索的词并不存在与我的数据中,那么它可以以很快的速度返回目标不存在. 让我们看看以下

python - socket通信笔记

参考: 通过编写聊天程序来熟悉python中多线程和socket的用法:https://www.cnblogs.com/mingjiatang/p/4905395.html python socket通信:https://yq.aliyun.com/articles/40745?spm=5176.100239.blogcont40768.17.FIFTZv 1.socket使用方法 a.在python中使用socket时要iamport socket b.在使用socket中又服务器端和客户端之

Python3的tcp socket接收不定长数据包接收到的数据不全。

Python Socket API参考出处:http://blog.csdn.net/xiangpingli/article/details/47706707 使用socket.recv(pack_length)接收不定长的数据,如果数据包长度超过一定值,则接收的数据不全. 参照python3.4的文档可发现: socket.recv(bufsize[, flags]) Receive data from the socket. The return value is a bytes objec

1.python小项目:大数据统计

大数据统计 1.项目需求,统计海量数据中某一参数的概率分布 2.实现过程 #!/usr/bin env python # -*- coding:utf-8 -*- import re def preprocess(fileName, pattern): ''' 将数据集进行预处理,比如取出RSSI那一列的数据 :param fileName: 接收相对路径 :param pattern: 接收正则表达式的模板 :return: 返回Region of interest数据集 ''' with o

下载大数据实战课程第一季Python基础和网络爬虫数据分析

python语言近年来越来越被程序相关人员喜欢和使用,因为其不仅简单容易学习和掌握,而且还有丰富的第三方程序库和相应完善的管理工具:从命令行脚本程序到gui程序,从B/S到C/S,从图形技术到科学计算,软件开发到自动化测试,从云计算到虚拟化,所有这些领域都有python的身影:python已经深入到程序开发的各个领域,并且会越来越多的人学习和使用. 大数据实战课程第一季Python基础和网络爬虫数据分析,刚刚入手,转一注册文件,视频的确不错,可以先下载看看:链接:http://pan.baidu

四种武器--大数据与R,python,SAS,SPSS的关系?

武林中人很多都要求自己各种兵器都能够使用,但每个人都会有一个自己最擅长的兵器.以前这四种软件就如大数据里的"刀枪棍棒".兵器只是一部分,重要的还是我们自身对于大数据的理解,也就相当于是内功.毕竟,双方比武,兵器取胜的部分是很大,但不是决定因素!试想,一个内功高深的人跟一个只会使枪的人来比试,说不定对方摘叶就可以伤到那个只会使剑的人.......... 好吧!我们就一一揭开这四种"武器"的面纱! 先说R,与其说是一门语言,不如说是一个软件.他更多的应用是在数据量在中小

大数据时代下的 Python

随着科技的发展,拥有高容量.高速度和多样性的大数据已经成为当今时代的主题词.移动互联网.云计算.大数据的快速发展,使Python给开发者带来巨大的机会.Python 不仅仅是一个设计优秀的程序语言,它能够完成现实中的各种任务,包括开发者们日复一日所做的事情. 百度指数概况 整体趋势 选择Python的原因 Python的开放.简洁.黏合正符合了现发展阶段对大数据分析.可视化.各种平台程序协作产生了快速的促进作用.越来越多人开始使用Python.