粘包:两次数据粘到一起了。在Windows中基本看不出来效果。

服务器端的配置:

import socket,os,time

server=socket.socket()
server.bind(('localhost',9999))
server.listen()
while True:
conn,addr=server.accept()
print("new connection is :",addr)
while True:
data=conn.recv(1024)
if not data:
print("客户端已经断开")
break
cmd_res=os.popen(data.decode('utf-8')).read()
if len(cmd_res)==0:
cmd_res="命令无效,没有返回值"
conn.send(str(len(cmd_res.encode())).encode('utf-8'))
#整数不能直接encode,需要先转成字符串,再encode.发大小给客户端
#time.sleep(0.5) #防止粘包
client_ack=conn.recv(1024) #wait client to confirm
print("ack from client:",client_ack)
conn.send(cmd_res.encode('utf-8'))
server.close()

客户端的配置:

import socket

client=socket.socket()
client.connect(('localhost',9999))
while True:
cmd=input(">>:").strip()
if len(cmd)==0:
break
client.send(cmd.encode('utf-8'))
cmd_res_size=client.recv(1024) #接收命令结果的长度。
print("命令结果大小:",cmd_res_size)
client.send('准备好接收了,你可以发了'.encode("utf-8"))
received_size=0
received_data=b""
while received_size<int(cmd_res_size.decode("utf-8")):
data=client.recv(1024)
received_size=received_size+len(data) #每次收到的有效数字,有可能小于1024
received_data=received_data+data
else:
print("cmd res received done...",received_size)
print(received_data.decode('utf-8'))
client.close()

最新文章

  1. .NET 常用框架
  2. 【python】jiraAPI使用教程 自动创建jira问题单并置状态为OPEN
  3. jdk源码分析之ArrayList
  4. E: dpkg 被中断,您必须手工运行 sudo dpkg --configure -a 解决此问题。
  5. SQL SERVER安装序列号
  6. 关于C++ vector的拷贝
  7. EF Code First 学习笔记:表映射
  8. 产生不重复的随机数TGUID
  9. 怎么删除hao.qquu8.com绑定
  10. BZOJ3997: [TJOI2015]组合数学(网络流)
  11. Android Studio 学习(六)内容提供器
  12. mysql 行转列 列转行
  13. 寻找总是出错的R文件
  14. CSRF的防御解决过程
  15. luoguP4709 信息传递 置换 + 多项式exp
  16. Spring.net介绍及MVC中应用
  17. MySQL 忘记密码:skip-grant-tables
  18. subversion commit 报错A checksum mismatch occurred
  19. Git添加本地项目出现fatal: unable to get credential storage lock: File exists
  20. sql server性能调优

热门文章

  1. 青岛Uber优步司机奖励政策(12月28日到1月3日)
  2. JavaScript---复选框全选的多种实现
  3. spark 执行架构
  4. 「日常温习」Hungary算法解决二分图相关问题
  5. hdu1159Common Subsequence(动态规划)
  6. Selenium安装(二)
  7. Iview 表单提交: Cannot read property &#39;validate&#39; of undefined
  8. Linux命令应用大词典-第11章 Shell编程
  9. Unity Shader学习笔记 - 用UV动画实现沙滩上的泡沫
  10. [CodeForce431C]k-tree