Python学习-Socket实现简单的SSH服务端

1,384 views次阅读
没有评论

版本一

服务端

客户端

存在问题:

服务端一次只发送1024,如果客户端执行命令结果大于1024,则会存入缓冲区,等待下一次客户端执行命令时,发送上一次未发送完的命令结果

如图:

1、客户端执行指令:ipconfig /all

Python学习-Socket实现简单的SSH服务端

2、服务端显示发送数据大小为2428,已大于1024

Python学习-Socket实现简单的SSH服务端

3、客户端再次执行dir,但收到的数据仍为ipconfig /all的数据

Python学习-Socket实现简单的SSH服务端

 

 

版本二

服务端

要解决上面的问题,只需在服务端向客户端发送正式数据前,先统计数据大小,并告知客户端数据大小,再由客户端进行判断,收到的数据如果小于该数据大小,便循环收取数据

 

Python学习-Socket实现简单的SSH服务端

客户端

客户端需要增加接受数据总大小,并进行判断,来循环接受

Python学习-Socket实现简单的SSH服务端

如图,已全部接收

Python学习-Socket实现简单的SSH服务端

解决粘包问题

Python学习-Socket实现简单的SSH服务端

在Linux中运行时,由于两次conn.send连在一起执行,会导致首次发出的包总大小数据和正式返回的数据连在一起,导致客户端报错,程序退出,解决该问题只需在两次send中间加一个ack确认即可

服务端

Python学习-Socket实现简单的SSH服务端

客户端

Python学习-Socket实现简单的SSH服务端

测试:

Python学习-Socket实现简单的SSH服务端

Honest1y
版权声明:本站原创文章,由Honest1y于2018年07月13日发表,共计3129字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)