客户端:

import socket

client = socket.socket()
client.connect(("127.0.0.1", 9999)) while True:
cmd = input(">>").strip()
if not cmd: # 不能发送空字符串,否则在接收端的recv方法会阻塞
continue
client.send(cmd.encode("utf-8"))
len_res = int(client.recv(1024).decode("utf-8")) # 这里的长度是服务端发送的数据编码后的长度 length = 0
total_data = b'' # 用空字符串循环接收bytes.接收完了再decode,因为分次接收每次decode可能会出错
while True:
res = client.recv(8192)
total_data += res
length += len(res)
if length == len_res:break
print(total_data.decode("utf-8"))
print("命令大小>>", len_res)
print("收到的结果大小",length)

服务器:

import socket
import os '''
注意1:
send一次性把结果发送给客户端了。
但客户端只接了1024,剩下的没有扔,放到了缓冲区buffer了
下一次send把缓冲区的先发出去,再把新的数据放入缓冲区
客户端虽然写的收1024.代表最多收1024.
1、缓冲区满了自动发
2、用send强制发
所以send的意思是:
如果缓冲区有数据,就从缓冲区发送一次客户端最大能接收的数据。再把新数据放到缓冲区
如果缓冲区没数据,就把新数据放入缓冲区,再从缓冲区发送一次客户端最大能接收的数据 注意2:
len方法判断长度的时候,如果是中文encode之前和之后的长度可能不一样,注意区分
'''
server = socket.socket()
server.bind(("0.0.0.0", 9999))
server.listen() while True:
conn, address = server.accept()
print("来自客户端的连接:", conn)
while True:
cmd = conn.recv(1024).decode("utf-8")
if not cmd: # 如果客户端断开,cmd会进入死循环,一直接收到空字符串
print("client is lost...")
break
res = os.popen(cmd).read()
if len(res) == 0: # 如果命令执行不成功,暂时返回特定的提示
res = "cmd has not output"
conn.send(str(len(res.encode("utf-8"))).encode("utf-8")) # 这里注意:有中文的时候编码前和编码后的长度不一样。这里的是编码后的长度
conn.send(res.encode("utf-8"))

socket接收大数据流的更多相关文章

  1. 网络编程基础【day09】:socket接收大数据(五)

    本节内容 1.概述 2.socket接收大数据 3.中文字符的坑 一.概述 上篇博客写到了,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区 ...

  2. 【python】-- Socket接收大数据

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

  3. 网络编程 - socket接收大数据

    通过socket,实现客户端发送命令,将服务端执行出的结果,反回到客户端,主要4个步骤:1.服务端返回数据: 2.服务端返回数据的大小: 3.客户端接收返回数据的大小: 4.客户端按返回数据大小接收数 ...

  4. Socket接收大数据的方法

    byte[] buffer = new byte[BufferSize]; int bytesRead; // 读取的字节数 MemoryStream msStream = new MemoryStr ...

  5. C# TCP socket发送大数据包时,接收端和发送端数据不一致 服务端接收Receive不完全

    简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...

  6. 利用Socket进行大文件传输

    分类: WINDOWS 最近接触到利用socket进行大文件传输的技术,有些心得,与大家分享.首先看看这个过程是怎么进行的(如下图):      所以,我们需要三个socket在窗体加载的时候初始化: ...

  7. 嵌入式 vlc从接收到数据流到播放视频的过程分析(经典)

    个人整理: Vlc流播放流程 vlc源码目录树: 目录名称 说明 bindings Java, CIL 和Python绑定 doc 帮助文档 (不是更新的) extras 另叙. include VL ...

  8. 基于socket实现大文件上传

    import socket 1.客户端: 操作流程: 先拿到文件--->获取文件大小---->创建字典 1.制作表头 header  如何得到 他是一个二进制字符串 序列化得到 字典字符串 ...

  9. android开发 socket接收图片并保存

    逻辑:接收到socket之后需要将socket发送的图片数据保存下来并通知handler更新界面 关键代码: public void readImage(Socket socket) { try { ...

随机推荐

  1. windows之桌面程序引导功能

    经常使用windows系统的同学可能都会遇到这样一种情况,刚按照完的应用程序,可能会在桌面产生一个提示信息,指示当前快捷方式可以使用了,并给出相应的文字说明,指示该快捷方式的功能.那么大家有没有考虑过 ...

  2. Flink生成Parquet格式文件实战

    1.概述 在流数据应用场景中,往往会通过Flink消费Kafka中的数据,然后将这些数据进行结构化到HDFS上,再通过Hive加载这些文件供后续业务分析.今天笔者为大家分析如何使用Flink消费Kaf ...

  3. 记一次Eureka启动报Failed to start bean 'eurekaAutoServiceRegistration' 。。。错误

    在一次项目迁移的过程中,新导入了两个依赖,结果项目启动就报错,如下: 主要原因是:Failed to start bean 'eurekaAutoServiceRegistration'; neste ...

  4. scrapy爬虫学习系列四:portia的学习入门

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

  5. ansible学习系列1-ansible简介

    1.ansible简介 官方说明:Ansible is an IT automation tool. It can configure systems, deploy software, and or ...

  6. python学习第一讲,python简介

    目录 python学习第一讲,python简介 一丶python简介 1.解释型语言与编译型语言 2.python的特点 3.python的优缺点 二丶第一个python程序 1.python源程序概 ...

  7. springmvc 项目完整示例02 项目创建-eclipse创建动态web项目 配置文件 junit单元测试

    包结构 所需要的jar包直接拷贝到lib目录下 然后选定 build path 之后开始写项目代码 配置文件 ApplicationContext.xml <?xml version=" ...

  8. haproxy使用演示--技术流ken

    haproxy简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.基于合理的配置及优化,完全可以实现单机支持数 以万计的并 ...

  9. 第32章 事件 - Identity Server 4 中文文档(v1.0.0)

    日志记录是更低级别的"printf"样式 - 事件代表有关IdentityServer中某些操作的更高级别信息.事件是结构化数据,包括事件ID,成功/失败信息,类别和详细信息.这使 ...

  10. C# 如何获取Url的host以及是否是http

    参考资料:https://sites.google.com/site/netcorenote/asp-net-core/get-scheme-url-host Example there's an g ...