用py文件调用操作系统的命名,粘包问题
帅爆太阳的男人
1,执行代码
- 在py代码中去调用操作系统的命令
- 新的模块:subprocess,
import subprocess
r = subprocess().Popen(
"dir",
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
解释:
- cmd:代表系统命令
- shell=True代表这条命令是系统命令,告诉操作系统,将cmd当成系统命令去执行
- stdout 是执行完系统命令之后,用于保存结果的一个管道
- stderr 是执行完系统命令之后,用于保存错误结果的一个管道
- print(r.stdout().decode("gbk"))
- print(r.stderr().decode("gbk"))
执行命令:
- 服务器端
import socket
import subprocess # 一个可以通过程序调用操作系统的命令的模块
sk = socket.socket()
sk.bind(("127.0.0.1",8008))
sk.listen()
conn,addr = sk.accept()
while 1:
cmd = conn.recv(1024).decode("utf-8")
r = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE) # 固定写法,一个参数都不能少
stdout = r.stdout.read() # 当时正确的调用命令就读出来
stderr = r.stderr.read() # 错误的命令也读出来
if stdout:
conn.send(stdout)
else:
conn.send(stderr)
conn.close()
sk.close()
- 客户端
import socket
sk = socket.socket()
sk.connect(("127.0.0.1",8008))
while 1:
sk.send(input("请输入操作的命令:").encode("utf-8")) # 客户端给服务器操作指令,再有服务器返回给客户端
result = sk.recv(1024).decode("gbk") # 由操作系统返回给客户端的命令信息必须是:gbk解码
print(result)
sk.close()
2,粘包问题:只有TCP协议有粘包,UDP不会发生粘包
- 粘包的原因:发送端发送数据,接收端不知道该如何去接收,造成的一种数据混乱的现象
- 在Tcp协议中:
- 有一个合包机制(nagle算法),将多次连续发送且间隔较小的数据,进行打包成一块数据去传送
- 另一个是拆包机制,在发送端,因为受到网卡的MTU限制,会将大的超过MTU限制的数据,进行拆分,拆分成多个小的数据,进行传输,当传输到目标主机的操作系统层时,会重新将多个小的数据合并成原来的数据
# 客户端
import socket
sk = socket.socket()
sk.bind(("127.0.0.1",8001))
sk.listen()
conn,addr = sk.accept()
while 1:
conn.send(b"hello")
conn.send(b"world")
conn.close()
sk.close()
- 服务端
import socket
sk = socket.socket()
sk.connect(("127.0.0.1",8001))
msg1 = sk.recv(1024)
msg2 = sk.recv(1024)
print(msg1,type(msg1))
print(msg2,type(msg2))
sk.close()
3,针对,使用UDP协议发送数据,一次收发的大小究竟多少合适?
- UDP不会发生粘包,UDP协议本层对一次收发数据大小的限制是:65535-ip包头(20)-UDP包头(8)=65507
- 站在数据链路层,因为网卡的MTU一般被限制在了1500,所以对于数据链路层来说一次收发数据的大小被限制在:1500-ip包头(20)-UDP包头(8) = 1472
- 所以:sendto(num)
- if num>65507:报错
- elif:1472<num<65507:会在数据链路层拆包,而UDP本身就是不可靠协议,所以一旦拆包之后,造成的多个小数据包在网络传输中,如果丢任何一个,那么此次数据传输失败
- else:num<1742:这种是比较理想的状态.
用py文件调用操作系统的命名,粘包问题的更多相关文章
- 使用bat脚本调用py文件直接获取应用的包名和targetversion
背景: 在上一篇已经介绍过如何利用python调用aapt获取包名 https://www.cnblogs.com/reseelei-despair/p/11078750.html 但是因为每次都要修 ...
- python socket实现文件传输(防粘包)
1.文件传输的要点: 采用iterator(迭代器对象)迭代读取,提高读取以及存取效率: 通过for line in file_handles逐行conn.send(): 2.socket粘包问题: ...
- Django-自己写的py文件调用models&Non-ASCII character报错&url接收参数
1.这个设置是网上能查到的最多的,但是没解决我的问题: Django的models.py在外部独立使用,新建一个文件夹,和monitor1目录平级 import sys,os sys.path.app ...
- python中pycharm中.py文件调用一个.py文件的函数
在相同文件夹内调用函数: file1.py def add(x,y): print('和为:%d'%(x+y)) file2.py import A A.add(1,2)
- Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用
在eclipse中用pydev开发Python脚本时,我遇到了一个这样的现象,当我新建一个pydev package时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很 ...
- python 项目中包中__init__.py文件的作用
开发python项目时,我遇到了一个这样的现象,当我新建一个pythonpackage时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很不了解这个空文件的作用是什么, ...
- 18.Python模块包(pycharm右键创建文件夹和python package的区别)中__init__.py文件的作用
原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定义了包的属性和方法)然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了.当 ...
- Socket编程(4)TCP粘包问题及解决方案
① TCP是个流协议,它存在粘包问题 TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的.这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的.T ...
- TCP粘包问题及解决方案
① TCP是个流协议,它存在粘包问题 TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的.这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的.T ...
随机推荐
- VMware12 download
下载地址:http://filehippo.com/zh/download_vmware-workstation-pro/ 许可证地址:http://www.zdfans.com/5928.html
- tinyXml输出utf-8文档
TiXmlDocument虽然能读取utf-8的xml文件,但读入后在内存中是以多字节存储.如果新建一个TiXmlDocument,即使定义头为utf-8编码,直接调用SaveFile方法保存的文档仍 ...
- javascript事件委托和jquery事件委托
元旦过后,新年第一篇. 初衷:很多的面试都会涉及到事件委托,前前后后也看过好多博文,写的都很不错,写的各有千秋,自己思前想后,为了以后自己的查看,也同时为现在找工作的前端小伙伴提供一个看似更全方位的解 ...
- uva 10596 - Morning Walk
Problem H Morning Walk Time Limit 3 Seconds Kamal is a Motashota guy. He has got a new job in Chitta ...
- MySQL-----删
删 **清空数据库内容** delete from 数据库表名; ----清内容,但是自增列的数不清. truncate table 数据库表名; --------自增列的数也清. **清除指定的行数 ...
- 第二十二节:scrapy爬虫识别验证码(一)类库安装
一.安装tesserocr 1.首先下载tesseract:https://digi.bib.uni-mannheim.de/tesseract/ ,我下载的是tesseract-ocr-setup- ...
- LeetCode(46)Permutations
题目 Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the fo ...
- Light oj-1004 - Monkey Banana Problem,数字三角形的变形版~
100 ...
- SPOJ ARCTAN
POJ1183 除输入方式外与这道题完全一样 题目大意是给定一个a 求最小的满足arctan(1/A)=arctan(1/B)+arctan(1/C) 的B+C的最小值 根据上述递推规律,我们只要从2 ...
- [luoguP2617] Dynamic Ranking(树状数组 套 主席树 + 离散化)
传送门 BZOJ上是权限题,洛谷赞啊. 求区间 K 大数很简单. 但是如果修改某个数的话,那么就得把这个数及后面所建的主席树都更新一遍 nlogn,显然不行. 所以可以在外面套一个树状数组来优化,树状 ...