37.基于tcp协议远程执行命令+服务器并发

该博客探讨了如何基于TCP协议实现远程命令执行,重点解决粘包问题,并介绍了使用SocketServer模块实现服务器并发处理多个客户端连接的方法。粘包问题主要由TCP流式协议特性引起,解决思路涉及获取数据总大小并循环接收,确保完整接收数据。服务器端和客户端的解决方案分别进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原课程视频中,对这一块儿讲得可谓又臭又长,实在忍不了了,必须吐槽一句!这样在以后如果有机会复习的时候,能够有所心理准备。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值