客户端:客户端实例  --->  建立连接 ----> 发送内容 ---> 接受内容。

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 = client.recv(500)
print(cmd_res.decode("utf-8",'ignore')) client.close()

服务端:客户端实例 --> 绑定ip + 端口 ---> 监听客户端连接 —> 接受客户端数据 --->发送数据至客户端。

#!usr/bin/env phthon3
# -*- coding:utf- -*-
# _Author_:"zhang Yaoqing" import socket,os server = socket.socket()
server.bind(('localhost',))
server.listen()
while True:
conn,addr = server.accept()
print('add..',addr)
while True:
data = conn.recv()
if not data:
print('客户端断开连接')
break
cmd_res = os.popen(data.decode()).read()
print('before send',len(cmd_res))
if len(cmd_res) == :
cmd_res = 'cmd has no output...'
conn.send(cmd_res.encode('utf-8'))
server.close()

但是这里面有一个问题就是大数据怎么上传下载呢。里面有一个缓冲区的问题,上面recv(500)这里我们最多是接受500

我接收的是500字节,但是服务端传过来的确是比这个大的多,客户端只接收了500字节,那服务端剩下的字节跑哪里去了?

答:①服务端第一次全部发送给客户端,客户端只接收自己部分的字节数,剩下的字节数被存储在 IO缓冲区 中,下一次你再用send的时候,你以为接收的是新的数据,其实不是,它会先把缓冲区里的数据发出去,然后你的新数据再放到缓冲区中,直到缓冲区满了再发出去

  ②客户端虽然写的接收的是500,但它不一定能收到500,就是服务器这次send的时候,没有send到500,你依然说你收500,代表着你最多一次只能收500,但是你给我send10个字节,我也得收,所以说它不是等着500全收满了,你发过来多少,我就收多少。

有两种情况缓冲区会给你发数据:

  1. 缓冲区满了肯定会发
  2. 缓冲区超时:就是手动send,肯定会给客户端发,这边也已经强制超时了,默认会等着缓冲区慢,手动send是为了不让对方等了,强制发送

最新文章

  1. 《你不知道的JavaScript》整理(四)——原型
  2. 【机器学习Machine Learning】资料大全
  3. 阻止网页内部滚动条mousewheel事件冒泡
  4. mybatis 中sql语句传递多个参数
  5. PHP读写XML文件的四种方法
  6. mysql管理(一)
  7. go get 获得 golang.org 的项目
  8. MVC3 Razor模板引擎
  9. win10全系列官方MSDN原版系统安装密钥、版本区别、镜像下载地址与激活教程
  10. 【转】 MEF 和 MAF
  11. C - Courses - hdu 1083(模板)
  12. Silverlight调用网站项目的Session
  13. Bootstrap笔记合集
  14. BZOJ 2083: [Poi2010]Intelligence test [vector+二分]
  15. python之旅九【第九篇】socket
  16. js怎么删数组固定的值
  17. Centos7.6 安装DNS服务器
  18. Swift搭建本地http服务器,实现外部视频即时播放
  19. quartz 实例
  20. windows文件属性操作 dsofile

热门文章

  1. python执行系统命令后获取返回值的几种方式集合
  2. SaaS领域如何分析收入增长?
  3. delphi DBTreeview与数据库连接的数据存取
  4. jenkins部署Vue项目 & 远程到远程服务
  5. EKFiddle:基于Fiddler研究恶意流量的框架
  6. 《剑指offer》Q13-18 (牛客10.13)
  7. SSRF小梳理
  8. matlab imread函数全说明
  9. Qt5."Clang Code Model"一些设置
  10. poj 2362:square