python-day8socket、粘包、并发、多用户ftp
@以字符串名称形式引入外部模块:同级文件lib里面有个函数a打印66
1.解释器内部使用
m=__import__('lib')
print(m.a())
结果:
66
None
- 官方推荐用户使用
import importlib
m=importlib.import_module('lib')
print(m.a())
@类
F()()#执行类下面的__call__方法
__metaclass__暂时用不到
@@上周提到?
Fligh.status
Status.setter
Status.delter
__call__方法(没用过)
__mataclass__(没用过,以后可能用)
断言
@assert m is int#AssertionError
@ socket复习
博客里的Day7
@socket
tcp/ip send, recv
udp
family address
AF.INET ipv4
AF.INET6
AF.UNIX 。local
socket protocol type
sock.SOCK_STREAM tcp/ip
socket.SOCK_DGRAM 数据报式socket , for UDP
服务端
server = socket.socket(AF.INET,sock.SOCK_STREAM)
server.bind(localhost,9999)
server.listen()
while True:
conn,addr = server.accept() #阻塞?
while True:
print("new conn",addr)
data = conn.recv(1024) #8192最多,1024的整数 #recv默认是阻塞的
if not data:
break #客户端已断开, conn.recv收到的就都是空数据,
print(data)
conn.send(data.upper())
@判断一条程序是否被执行了,前后都print一句话。
@@@socket实现简单的ssh客户端
博客园Day8
@b”xxx”,xxx必须是ASCII码里面的内容才能转,中文转不了。
@send的时候如果服务器端允许接受的小于客户端发送量,剩余的进入缓冲区,第二次发的时候不发新的,而先发缓冲区里面的。系统默认最多buffer就8k,缓冲区满了发、超时也发,send相当于强制超时。
@整数不能encode,需要先转成字符串。
@8-4中问题,直接看截图就行,主要是调试一下错误。
同样的代码在unix和windows里面不一样,问题原因:不应该直接判断文件长度(字符数),而应该先encode再判断多少byte。
@socket判断信息长度版
- client端
import socket
client=socket.socket()
client.connect(('localhost',9999))
while True:
cmd=input('>>:').strip()
if len(cmd)==0:continue
client.send(cmd.encode('utf-8'))#必须是byte类型
cmd_res_size=client.recv(1024)
print("命令结果大小:",cmd_res_size)
client.send('准备好接受,可以发了'.encode('utf-8'))
received_size=0
received_data=b''
while received_size<int(cmd_res_size.decode()):
data=client.recv(1024)
received_size+=len(data)#每次收到的有可能小于1024,用len判断
received_data+=data
else:
print("cmd res receive done...",received_size)
print(received_data.decode())
client.close()
ssh端
import socket,os
server=socket.socket()#实例化,默认不填参数
server.bind(('localhost',9999))
server.listen()
while True:
conn,addr=server.accept()#conn是新的套接字对象,用来接收和发送数据。addr是连接客户端的地址。接收TCP 客户的连接(阻塞式)等待连接的到来
print('new conn:',addr)
while True:
print('等待新指令')
data=conn.recv(1024)
if not data:
print('客户端已断开')
break
print('执行指令:',data)
cmd_res=os.popen(data.decode()).read()#接收了字符串,执行结果也是
print('before send',len(cmd_res))
if len(cmd_res)==0:
cmd_res='none is output'#字符串前面加b就不能encode了
conn.send(str(len(cmd_res.encode())).encode('utf-8'))
client_ack = conn.recv(1024)#等客户端回复,防止粘包
conn.send(cmd_res.encode('utf-8'))#发送数据不可为空
print('send done')
server.close()
@男生着装:优衣库、zara、HM、tiger鞋;
@socket 粘包,两块数据一起发,如两次send,系统会从缓冲区将两者并成一条发出去。
sleep(0.25)还是有可能粘住
@8-7-4-30’’
python-day8socket、粘包、并发、多用户ftp的更多相关文章
- Python之粘包
Python之粘包 让我们基于tcp先制作一个远程执行命令的程序(1:执行错误命令 2:执行ls 3:执行ifconfig) 注意注意注意: res=subprocess.Popen(cmd.deco ...
- Python进阶----粘包,解决粘包(旗舰版)
Python进阶----粘包,解决粘包(旗舰版) 一丶粘包 只有TCP有粘包现象,UDP永远不会粘包 什么是粘包 存在于客户端接收数据时,不能一次性收取全部缓冲区中的数据.当下一次再有数据来时 ...
- python 网络编程粘包解决方案2 + ftp上传 + socketserver
一.struct 神奇的打包工具 struct 代码: import struct num = 156 #将int类型的数据打包成4个字节的数据 num_stru = struct.pack('i', ...
- 一小时学会用Python Socket 开发可并发的FTP服务器!!
socket是什么 什么是socket所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求 ...
- Python socket 粘包
目录 1 TCP的三次握手四次挥手 0 1.1 三次握手 1 1.2 四次挥手 2 2 粘包现象 3 2.1 基于TCP制作远程执行命令操作(win服务端) 4 2.1 基于TCP制作远程执行命令操作 ...
- python 解决粘包问题
客户端发送hello,如果服务端 recv(1) ,那只能接收到 h 这一个字符,然后再recv(1) 一下,可以再接收一个 e , 因为客户端发送的结果长,所以只能把其他的先缓存下来,下次recv的 ...
- Python socket粘包解决
socket粘包: socket 交互send时,连续处理多个send时会出现粘包,soket会把两条send作为一条send强制发送,会粘在一起. send发送会根据recv定义的数值发送一个固定的 ...
- Python socket粘包问题(最终解决办法)
套接字: 就是将传输层以下的协议封装成子接口 对于应用程序来说只需调用套接字的接口,写出的程序自然是遵循tcp或udp协议的 实现第一个功能个:实现:通过客户端向服务端发送命令,调取windows下面 ...
- Python socket粘包问题(初级解决办法)
server端配置: import socket,subprocess,struct from socket import * server=socket(AF_INET,SOCK_STREAM) s ...
- python socket粘包及实例
1.在linux中经常出现粘包的出现(因为两个send近靠着,造成接受到的数据是在一起的.)解决方法: 在服务端两send的中间中再添加一个recv(),客户端添加一个send(),服务端收到信息确认 ...
随机推荐
- BOM模型中常用对象 定义计数器 网页跳转 网页前进后退
今天上午学了的BOM模型中常用对象,了解了一部分的属性 For循环的规律 外层循环控制行 内层循环控制列 <!doctype html> <html> <head> ...
- centos 安装 crontab 和 简单的使用教程
crontab是一个非常好用的定时执行任务的程序.以下是操作方式 1. 安装 cron 的 主程序 : yum -y install vixie-cron 2. 安装 cron 守护进程的表格的程序 ...
- 移动端web页面列表类上拉加载,查看详情,iframe嵌套第三方页面遇到的问题以及解决办法
1.移动端上拉加载 网上有很多成熟的插件,比如iscroll.在这里介绍一下用jquery和js写的上拉加载方法.使用原生的去写上拉加载更多需要三个高度去做对比,以新闻类列表举例,首先需要整个dom的 ...
- hsdf -- 6.21 -- day6
差点忘写总结…… 这么快就到day6了啊 感觉前面写的总结都是苟屁,跟没有有什么区别…… 今天认真总结一下 最大的失误就是全程肝a题,最后还挂了…… 感觉今天方向偏了,由进行一次测试到仅仅是想要尽可能 ...
- c# 实现 HSV 调色板
界面相关核心代码如下: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private vo ...
- 面试题之python基础
基础语法 输入和输出 代码中要修改不可变的数据会出现什么问题,抛出什么异常? 代码不会征程运行,抛出TypeError异常 a = 1,b = 2,不用中间变量交换a和b的值? # 方法1 a = a ...
- error: Cannot find OpenSSL's <evp.h> Mac
问题 mac安装php需要openssl ./configure –with-openssl 报错 error: Cannot find OpenSSL’s 解决 brew install opens ...
- 时钟信号的占空比调整——Verilog
时钟信号的占空比调整——Verilog `timescale 1ns / 1ps /////////////////////////////////////////////////////////// ...
- Getting Started with XlsxWriter
下面是一些关于使用XlsxWriter模块的简单介绍. 安装XlsxWriter 下面的是几个安装XlsxWriter模块的方法: 1.使用Pip 使用pip 方式是最推荐的从PyPi安装Python ...
- VS2015 使用GIT同步到github
https://www.cnblogs.com/newP/p/5732431.html(参考) 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Meger) 获取(Fetch):从 ...