标签:soc serve 文件上传 一个 row 视频流 使用 网络 返回
TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。
使用TCP的应用:Web浏览器;电子邮件、文件传输程序。
UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文,尽最大努力服务,无拥塞控制。
使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。
三次握手(一定是client先发起请求):
四次挥手(谁先发起断开连接的请求都可以):
1 cs(client / server)架构:客户端与用户端架构. 客户端泛指用户端的EXE,需要用户实现安装相应的客户端(app之类).对电脑操作系统依赖较大 优势:发挥pc端的性能
2 bs(Browser与Server),中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。统一了用户接口
Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser 浏览器就能进行增删改查。
import socket # 引入socket模块 slicent = socket.socket() # 创建套连接 slicent.bind((‘192.168.13.58‘, 8000)) # 创建端口 slicent.listen(5) # 最大排队数5 conn, addr = slicent.accept() # 等待客户端连接 会有阻塞 data = conn.recv(1024) #接收客户端发送来的消息 print(data.decode("utf8"))#解码打印 conn.send(b"ok") #给客户端回复 slicent.close()
import socket server = socket.socket() # 创建套接字 server.connect(("192.168.13.58", 8000)) # 连接服务端 neirong = input("请输入你想说的话:") server.send(neirong.encode("utf8")) #发送给服务端内容 data = server.recv(1024) #接收服务端发送来的消息 print(data.decode()) #打印消息 server.close() #关闭套连接
import struct res = struct.pack("i", 123456) #"i"表示int,后面输入内容只能是int类型 编码压包 print(res) #b‘@\xe2\x01\x00‘ print(len(res))# 4 内容长度压缩到4个字节 obj = struct.unpack("i", res) #解码解包 print(obj) # (123456,) 返回的是元组 print(obj[0]) #123456 取到压缩的内容
import subprocess res=subprocess.Popen("dir", shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE) print(res.stdout.read().decode("gbk"))
import socket,subprocess # 引入socket模块 slicent = socket.socket() # 创建套连接 slicent.bind((‘192.168.13.58‘, 8000)) # 创建端口 slicent.listen(5) # 最大排队数5 while 1: #循环建立连接 print("server is waiting....") conn, addr = slicent.accept() # 等待客户端连接 会有阻塞 while 1: #循环接受信息 try: cmd= conn.recv(1024).decode("utf8") #接收客户端发送来的消息 if cmd == ‘exit‘: #如果收到的信息是exit 退出本层循环 break res=subprocess.Popen(cmd,shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE) err=res.stderr.read() #根据给的指令在终端执行 反馈的结果有错误 out=res.stdout.read()#根据给的指令在终端执行 反馈的结果(正常) print("err相应内容",err.decode("gbk")) print("out相应内容",out.decode("gbk")) if err:#如果有错误 import struct header_pack=struct.pack("i",len(err)) #压缩打包err的长度 conn.send(header_pack) #给客户端回复错误字节长度 conn.send(err) else:#如果指令没有错误 import struct header_pack=struct.pack("i",len(out)) ##构建报头 conn.send(header_pack) #发送报头 conn.send(out) #发送数据 因为数据为底层的gbk编码 所以不用再次编码 except Exception as e: #异常退出 break conn.close()#关闭本次套接字
import socket,struct server = socket.socket() # 创建套接字 server.connect(("192.168.13.58", 8000)) # 连接服务端 while 1: #循环输入 cmd = input("请输入命令:") #给服务端发送想要其执行的指令 例如:dir ipconfig ipconfig /all if not cmd:continue elif cmd ==‘exit‘: break server.send(cmd.encode("utf8")) #发送给服务端要执行的命令 data_l = server.recv(4) #接收服务端发送来的消息的长度 data_length=struct.unpack("i",data_l)[0]#解包长度 recv_data_length=0 #设定传过来的内容长度 recv_data=b"" #设定传过来的内容 while recv_data_length<data_length: #当前传过来的内容长度小于传过来的内容的总长度 data=server.recv(1024) #每次接收1024个字节 recv_data_length+=len(data) #传过来内容长度 recv_data+=data#传过来的内容 print(data.decode(‘gbk‘)) #打印消息 server.close() #关闭套连接
简单来说就是连续发送的文件可能被打包成一个传到另一服务器端,引入了sticut模块来解决这个问题
标签:soc serve 文件上传 一个 row 视频流 使用 网络 返回
原文地址:https://www.cnblogs.com/lingcai/p/9594529.html