原课程视频中,对这一块儿讲得可谓又臭又长,实在忍不了了,必须吐槽一句!这样在以后如果有机会复习的时候,能够有所心理准备。
1.基于tcp协议远程执行命令
1.粘包问题
1.粘包问题出现的原因:
1、tcp是流式协议,数据像水流一样粘在一起,没有任何边界区分
2、收数据没收干净,有残留,就会下一次结果混淆在一起
2.解决粘包问题思路:
1、拿到数据的总大小total_size
2、recv_size=0,循环接收,每接收一次,recv_size+=接收的长度
3、直到recv_size=total_size,结束循环
2.解决方案
1.服务端:
import subprocess
import struct
import json
from socket import *
server=socket(AF_INET,SOCK_STREAM)
server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #就是它,在bind前加
server.bind(('127.0.0.1',8083))
server.listen(5)
# 服务端应该做两件事
# 第一件事:循环地从板连接池中取出链接请求与其建立双向链接,拿到链接对象
while True:
conn,client_addr=server.accept()
# 第二件事:拿到链接对象,与其进行通信循环
while True:
try:
cmd=conn.recv(1024)
if len(cmd) == 0