客户端:

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"))

最新文章

  1. FireBug提示:本页面不包含 JavaScript,明明是包含js的。
  2. canvas绘图
  3. 第1个linux驱动___打印"hello world"
  4. NOIP2016初赛总结(提高组)
  5. c 终端控制
  6. H3C远程登陆配置
  7. AWR
  8. springmvc中url-pattern的大坑
  9. PostgreSQL与MySQL比较(转)
  10. Delphi xe7并行编程快速入门(转)
  11. zookeeper 笔记-机制的特点
  12. Inspinia_admin-V2.3原版(英文)
  13. 分析dhcp.lease文件,统计DHCP服务器IP自动分配
  14. H5网页适配 iPhoneX,就是这么简单
  15. 杭电2000----ASCII码排序
  16. pandas功能使用rename, reindex, set_index 详解
  17. C# 给枚举类型增加一个备注特性
  18. maria-developers 开发者邮件
  19. Spring Boot 文档
  20. EF的连表查询Lambda表达式和linq语句

热门文章

  1. arrays.xml中使用integer-array引用drawable图片资源,代码中如何将这些图片资源赋值到ImageView控件中
  2. TCP连接有效性检测方法
  3. 前端笔记之HTML5&CSS3(下)2D/3D转换&animate动画
  4. 免费IPv6访问收费IPv4,校园网免流量
  5. C语言实现邻接矩阵创建无向图&图的深度优先遍历
  6. Token&Cookies&Session
  7. 实现PHP内部的通知机制,如当一个类的属性发生变化时,另外一个类就可以收到通知
  8. C#面试分享:单例模式
  9. ecstore 安装后提示require function does not exist in....
  10. Object.keys 及表单清空