基础1中只能通过socket传输1次,当需要循环交互或者单个数据超过接收缓冲区大小后代码就无能为力。下面代码通过实现简单ssh功能来说明如何通过socket传输超过接收缓冲区大小数据以及如何同客户端进行交互

server端实现

 1 # _*_ coding:utf-8 _*_
 2 import socket,os
 3 server = socket.socket() #创建连接描述符,默认使用iv4/tcp
 4 server.bind(("localhost",6969)) #指定监听地址和端口,开始等待客户端连接。
 5 server.listen(5) #监听
 6 print("服务端已启动")
 7 while True:
 8     conn,addr = server.accept() #创建和客户端交互数据的连接
 9     print('new conn',conn)
10     while True:
11         date = conn.recv(1024) #1024为接收字节大小
12         if len(date) == 0:  #判断客户端是否断开,若客户端断开则接收端接收的数据长度为0
13             print("client is close")
14             break
15         print('recv cmd is::',date.decode('utf-8'))
16         cmd_res = os.popen(date.decode('utf-8')).read() #该命令无法获取os返回的异常,使用下面if判断输入cmd是否为异常
17         if len(cmd_res) == 0:
18             cmd_res = 'this is a bad command'
19         conn.send(str( len(cmd_res.encode(encoding='utf-8'))).encode(encoding='utf-8')) #发送命令长度
20         conn.recv(1024) #为解决粘包问题中间插入一个接收操作
21         conn.send(cmd_res.encode(encoding='utf-8'))
22
23
24 server.close()  #关闭连接

客户端实现

# _*_ coding:utf-8 _*_
import socket
client = socket.socket() #创建连接描述符,指定socket连接的网络层和传输层协议,默认使用ipv4/tcp
client.connect(("localhost",6969)) #使用连接描述符连接server,server信息以元组形式传入,包含ip地址和端口号
while True:cmd = input("input your command:")if len(cmd) == 0:continueclient.send(cmd.encode(encoding='utf-8')) #发送hello world,send只能发送byte类型,不能发送字符串。encode默认会将字符串转为byte类型cmd_res_len = client.recv(1024).decode() #接收命令回显的长度print("cmd_res_len:",cmd_res_len)client.send(b'i have receive cmd_res_len') #为解决粘包问题,给服务端发送响应rece_size = 0while rece_size < int(cmd_res_len):  #通过此循环持续收包print(client.recv(1024).decode())rece_size += 1024client.close()

转载于:https://www.cnblogs.com/flags-blog/p/9535569.html

socket_基础2_传输大数据相关推荐

  1. 零基础学Java大数据难不难

    java大数据如今在企业中用到的次数是非常多的,很多人都比较看好java技术,那么零基础学Java大数据难不难?想要学习java技术说难不难,说简单也不是很简单,来看看下面的详细介绍就知道了. 零基础 ...

  2. 零基础想学大数据?别急!先搞清这一点

    在入行大数据开发之前,相信很多同学都存在一些疑虑. 现在入行大数据有前途吗? 学大数据一定要会Java开发吗? 我是零基础,对大数据什么都不懂,能学好吗? .... 大数据时代,给想从事IT行业的人带 ...

  3. 问题解决-----如何从windows10向ubuntu传输大数据的文件(大于等于50M)

    问题解决-----如何从windows10向ubuntu传输大数据文件目录 一.问题描述 1.问题描述如下: 二.FileZilla的下载及安装 1.FileZilla的下载地址如下所示: 2.Fil ...

  4. 零基础能学大数据开发吗 可以从哪些方面入手

    大数据作为当下呼声特别高的IT技术,想学大数据的朋友已经从一个变成两个,从两个变成三个,但是计数单位,也是从个到百到千到万到亿,接下来还可能更高.零基础能学大数据吗?郑州大数据培训哪家好? 面对这个问 ...

  5. 零基础学习java大数据真的难吗?

    java是一门永不言败的开发语言,随着软件行业的兴盛,现在学习java的人员也是越来越多了,但是想要学好java的话自学是没有那么容易的事情.特别是对于零基础的学员来,所以对于零基础的学员来说都是要参 ...

  6. 零基础小白的大数据入门手册

    零基础小白的大数据入门手册,学大数据前,大家可能听过不少说大数据难学.入行做好心理准备的.大家听完也很动摇很犹豫,怀疑自己能不能学好大数据.这其实完全没有必要,觉得一个东西难,百分之八十的原因是你不了 ...

  7. WCF传输大数据的设置

    在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke,没有进入服务端的Service实际逻辑中,怀疑是由于 ...

  8. 【随】WCF传输大数据的设置

    在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke,没有进入服务端的Service实际逻辑中,怀疑是由于 ...

  9. spark 流式计算_流式传输大数据:Storm,Spark和Samza

    spark 流式计算 有许多分布式计算系统可以实时或近实时处理大数据. 本文将从对三个Apache框架的简短描述开始,并试图对它们之间的某些相似之处和不同之处提供一个快速的高级概述. 阿帕奇风暴 在风 ...

最新文章

  1. 2022-2028年中国农用塑料薄膜行业市场研究及前瞻分析报告
  2. loganalyzer部署文档-(第一部分)
  3. 编写程序,输入各类型变量按相应格式输出
  4. 99 位职业设计师 99 个设计谏言
  5. Java 洛谷 P1151 子数整数
  6. tensorflow-yolov3 yunyang1994 image_preporcess(image, target_size, gt_boxes=None)函数 image_preprocess
  7. 天梯赛 喊山 bfs
  8. python和nodejs数据传递_python中的*和**参数传递机制
  9. 强化学习用于电力系统决策与控制(一)——频率调整
  10. 判断一个数是否为素数 java_java中如何判断一个数是否是素数(质数)
  11. python调用pyd_使用python pyd时出错
  12. Java函数式编程与Lambda表达式
  13. 最新版(2019.3.23)荣耀paly真机调试(Android stdio)
  14. 如何建立异地容灾备份体系
  15. 大学计算机知识考试题,大学计算机基础理论知识前三章测试题
  16. MathType如何编辑等号带点
  17. webrtc 搭建直播平台
  18. 计算机组成原理组成.ppt,计算机组成原理xu.ppt
  19. k8s集群搭建-1mater2node
  20. 京东销售联盟佣金支付始末

热门文章

  1. JavaScript语法(二)
  2. 将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型
  3. Hungary(匈牙利算法)——二分图最大匹配
  4. 利用Unity实现AOP
  5. 2012年7月份第4周51Aspx源码发布详情
  6. JNI的方式调用DLL(SO)(上)
  7. python环境变量配置步骤_关于人工智能Python系统环境变量设置步骤
  8. HTML中del标记是什么意思,HTML del标记
  9. 访问php文件显示500错误,nginx 访问.php文件正常,访问.html文件500错误
  10. c语言链表内存分配失败,链表的C语言实现之动态内存分配