标签:UDP struct recv subprocess day25TCP print data pack
day25
内容详细
1.TCP和UDP
-
TCP (Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:web浏览器;电子邮件、文件传输程序。
-
UDP(User Datagram Prolocol)不可靠的,无连接的服务,传输效率高(发送前时小),一对一,一对多,多对一,多对多,面向报文,静最大努力服务,无堵塞控制。使用UDP的应用:域名系统(DNS);视频流;IP语音。
2.subprocess
import subprocess
res=subprocess.Popen("dir",#指定命令名
shell=True,
stderr=subprocess.PIPE,
#错误输出
stdout=subprocess.PIPE,)
#接收系统返回的值
print(res.stdout.read().decode("gbk"))
#输出接收到的值以“gbk”
3.struct
import struct
#i模式把123456压缩,四个字节,如果大于就报错
header_pack=struct.pack("i",123456)#压包
print(header_pack)
obj = struct.unpack("i",beader_pack)#解包
print(obj)
实例
客户端
import socket
import struct
sk = socket.socket()
sk.connect(('127.0.0.1',8008))
while 1:
cmd = input("请输入命令:")
sk.send(cmd.encode('utf-8')) # 字节
if cmd=="":
continue
if cmd == 'exit':
break
# header_pack=sk.recv(4)
# data_length=struct.unpack("i",header_pack)[0]
# print("data_length",data_length)
'''
b'xxx/xxx/xxx/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
'''
data_length=int(sk.recv(1024).decode("utf8"))
print("data_length",data_length)
recv_data_length=0
recv_data=b""
while recv_data_length<data_length:
data=sk.recv(1024)
recv_data_length+=len(data)
recv_data+=data
print(recv_data.decode("gbk"))
sk.close()
服务端
# by luffycity.com
import socket
import subprocess
server = socket.socket()
server.bind(('127.0.0.1',8008))
server.listen(5)
while True:
print("server is working.....")
conn,addr = server.accept()
# 字节类型
while True:
# 针对window系统
try:
cmd = conn.recv(1024).decode("utf8") # 阻塞
if cmd == b'exit':
break
res=subprocess.Popen(cmd,
shell=True,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
)
# print("stdout",res.stdout.read())
# print("stderr",res.stderr.read().decode("gbk"))
out=res.stdout.read()
err=res.stderr.read()
print("out响应长度",len(out))
print("err响应长度",len(err))
if err:
import struct
header_pack = struct.pack("i", len(err))
conn.send(header_pack)
conn.send(err)
else:
#构建报头
import struct
header_pack=struct.pack("i",len(out))
print("header_pack",header_pack)
# # 发送报头
conn.send(str(len(out)).encode("utf8"))
# 发送数据
conn.send(out)
except Exception as e:
break
conn.close()
day25
内容详细
1.TCP和UDP
-
TCP (Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:web浏览器;电子邮件、文件传输程序。
-
UDP(User Datagram Prolocol)不可靠的,无连接的服务,传输效率高(发送前时小),一对一,一对多,多对一,多对多,面向报文,静最大努力服务,无堵塞控制。使用UDP的应用:域名系统(DNS);视频流;IP语音。
2.subprocess
import subprocess
res=subprocess.Popen("dir",#指定命令名
shell=True,
stderr=subprocess.PIPE,
#错误输出
stdout=subprocess.PIPE,)
#接收系统返回的值
print(res.stdout.read().decode("gbk"))
#输出接收到的值以“gbk”
3.struct
import struct
#i模式把123456压缩,四个字节,如果大于就报错
header_pack=struct.pack("i",123456)#压包
print(header_pack)
obj = struct.unpack("i",beader_pack)#解包
print(obj)
实例
客户端
import socket
import struct
sk = socket.socket()
sk.connect(('127.0.0.1',8008))
while 1:
cmd = input("请输入命令:")
sk.send(cmd.encode('utf-8')) # 字节
if cmd=="":
continue
if cmd == 'exit':
break
# header_pack=sk.recv(4)
# data_length=struct.unpack("i",header_pack)[0]
# print("data_length",data_length)
'''
b'xxx/xxx/xxx/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
'''
data_length=int(sk.recv(1024).decode("utf8"))
print("data_length",data_length)
recv_data_length=0
recv_data=b""
while recv_data_length<data_length:
data=sk.recv(1024)
recv_data_length+=len(data)
recv_data+=data
print(recv_data.decode("gbk"))
sk.close()
服务端
# by luffycity.com
import socket
import subprocess
server = socket.socket()
server.bind(('127.0.0.1',8008))
server.listen(5)
while True:
print("server is working.....")
conn,addr = server.accept()
# 字节类型
while True:
# 针对window系统
try:
cmd = conn.recv(1024).decode("utf8") # 阻塞
if cmd == b'exit':
break
res=subprocess.Popen(cmd,
shell=True,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
)
# print("stdout",res.stdout.read())
# print("stderr",res.stderr.read().decode("gbk"))
out=res.stdout.read()
err=res.stderr.read()
print("out响应长度",len(out))
print("err响应长度",len(err))
if err:
import struct
header_pack = struct.pack("i", len(err))
conn.send(header_pack)
conn.send(err)
else:
#构建报头
import struct
header_pack=struct.pack("i",len(out))
print("header_pack",header_pack)
# # 发送报头
conn.send(str(len(out)).encode("utf8"))
# 发送数据
conn.send(out)
except Exception as e:
break
conn.close()
标签:UDP,struct,recv,subprocess,day25TCP,print,data,pack 来源: https://www.cnblogs.com/fxy1024/p/14993439.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。