server端配置: import socket,subprocess,struct from socket import * server=socket(AF_INET,SOCK_STREAM) server.bind(('127.0.0.1',8080)) server.listen(5) while True: conn,client_addr=server.accept() while True: try: cmd=conn.recv(1024) if len(cmd) == 0:bre…
socket粘包现象分析与解决方案 简单远程执行命令程序开发(内容回顾) res = subprocess.Popen(cmd.decode('utf-8'),shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE) #subprocess模块详情见模块详解 命令结果的编码是以当前所在的系统为准的,如果是windows,那么res.stdout.read()读出的就是GBK编码的,在接收端需要用GBK解码,且只能从管道里读一次结果 远程执…
socket粘包: socket 交互send时,连续处理多个send时会出现粘包,soket会把两条send作为一条send强制发送,会粘在一起. send发送会根据recv定义的数值发送一个固定的数值,如果最后一次,所剩的数值小于recv定义数就会连带两条send数据同时发送,发生粘包状况. 解决方案: 方案1:可以使用time.sleep 在两send之间加上时间(不建议) 方案2:可以在send两条之间加入一条 conn.recv(1024) 服务端conn.send(str(len(c…
套接字: 就是将传输层以下的协议封装成子接口 对于应用程序来说只需调用套接字的接口,写出的程序自然是遵循tcp或udp协议的 实现第一个功能个:实现:通过客户端向服务端发送命令,调取windows下面的cmd窗口,将服务端执行命令的结构,返回并显示在 客户端窗口上. subprocess: 1.可以将执行结果返回 2.返回值是bytes类型 (基于这两点,可以应用在server端,将服务端的返回直接以bytes的格式直接send给客户端, 实现在客户端的显示) 问题1:粘包问题 粘包问题:实际是…
一. subprocess 的简单用法 import subprocess sub_obj = subprocess.Popen( 'dir', #系统指令 shell=True, #固定方法 stdout=subprocess.PIPE, #标准输出 PIPE 管道,保存着指令的执行结果 stderr=subprocess.PIPE #标准错误输出 ) # dir 当前操作系统(Windows)的命令,会执行stdout print('正确输出',sub_obj.stdout.read().d…
目录 1 TCP的三次握手四次挥手 0 1.1 三次握手 1 1.2 四次挥手 2 2 粘包现象 3 2.1 基于TCP制作远程执行命令操作(win服务端) 4 2.1 基于TCP制作远程执行命令操作(Linux服务端) 5 2.2 粘包产生的原因: 6 3 解决粘包 7 1 TCP的三次握手四次挥手 1.1 三次握手 1 客户端向服务端发起SYN请求,请求建立连接, 2 服务端同意建立连接,回应ACK,同时服务端向客户端发起SYN请求 3 客户端回应ACK 1.2 四次挥手 挥手是任意的,客户…
一. subprocess 的简单用法 import subprocess sub_obj = subprocess.Popen( 'dir', #系统指令 shell=True, #固定方法 stdout=subprocess.PIPE, #标准输出 PIPE 管道,保存着指令的执行结果 stderr=subprocess.PIPE #标准错误输出 ) # dir 当前操作系统(Windows)的命令,会执行stdout print('正确输出',sub_obj.stdout.read().d…
1.在linux中经常出现粘包的出现(因为两个send近靠着,造成接受到的数据是在一起的.)解决方法: 在服务端两send的中间中再添加一个recv(),客户端添加一个send(),服务端收到信息确认客户端已经收到第一个send发送的信息后,再发送第二个send中的内容. 2.需求: 客户端向linux服务端传送get指令,将服务端get到的数据传送到客户端,通过md5 验证传送后的数据是否正确,最后一次数据剩多少传输多少,防止数据粘包. #coding:utf-8 '''客户端''' impo…
服务器端 import socket import subprocess import struct server = socket.socket() ip_port = ("192.168.15.33",8001) server.bind(ip_port) server.listen() conn,addr = server.accept() while 1: print("等待接收消息...") from_client_cmd = conn.recv(1024)…
在socket网络编程中,都是端到端通信,由客户端端口+服务端端口+客户端IP+服务端IP+传输协议组成的五元组可以明确的标识一条连接.在TCP的socket编程中,发送端和接收端都有成对的socket.发送端为了将多个发往接收端的包,更加高效的的发给接收端,于是采用了优化算法(Nagle算法),将多次间隔较小.数据量较小的数据,合并成一个数据量大的数据块,然后进行封包.那么这样一来,接收端就必须使用高效科学的拆包机制来分辨这些数据. 1.Q:什么是TCP粘包问题?TCP粘包就是指发送方发送的若…