zoukankan      html  css  js  c++  java
  • 网络编程实现简单的ssh

    客户端:客户端实例  --->  建立连接 ----> 发送内容 ---> 接受内容。

    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"))
        cmd_res = client.recv(500)
        print(cmd_res.decode("utf-8",'ignore'))
     
    client.close()

    服务端:客户端实例 --> 绑定ip + 端口 ---> 监听客户端连接 —> 接受客户端数据 --->发送数据至客户端。

    #!usr/bin/env phthon3
    # -*- coding:utf-8 -*-
    # _Author_:"zhang Yaoqing"
    
    
    import socket,os
    
    server = socket.socket()
    server.bind(('localhost',1234))
    server.listen()
    while True:
        conn,addr = server.accept()
        print('add..',addr)
        while True:
            data = conn.recv(500)
            if not data:
                print('客户端断开连接')
                break
            cmd_res = os.popen(data.decode()).read()
            print('before send',len(cmd_res))
            if len(cmd_res) == 0:
                cmd_res = 'cmd has no output...'
            conn.send(cmd_res.encode('utf-8'))
    server.close()

    但是这里面有一个问题就是大数据怎么上传下载呢。里面有一个缓冲区的问题,上面recv(500)这里我们最多是接受500

          我接收的是500字节,但是服务端传过来的确是比这个大的多,客户端只接收了500字节,那服务端剩下的字节跑哪里去了?

    答:①服务端第一次全部发送给客户端,客户端只接收自己部分的字节数,剩下的字节数被存储在 IO缓冲区 中,下一次你再用send的时候,你以为接收的是新的数据,其实不是,它会先把缓冲区里的数据发出去,然后你的新数据再放到缓冲区中,直到缓冲区满了再发出去

      ②客户端虽然写的接收的是500,但它不一定能收到500,就是服务器这次send的时候,没有send到500,你依然说你收500,代表着你最多一次只能收500,但是你给我send10个字节,我也得收,所以说它不是等着500全收满了,你发过来多少,我就收多少。

    有两种情况缓冲区会给你发数据:

    1. 缓冲区满了肯定会发
    2. 缓冲区超时:就是手动send,肯定会给客户端发,这边也已经强制超时了,默认会等着缓冲区慢,手动send是为了不让对方等了,强制发送
  • 相关阅读:
    20201009 SpringBoot WebFlux 笔记
    20200930 尚硅谷 Netty【归档】
    20200930 11. 用Netty 自己 实现 dubbo RPC
    如何要注销按钮更加优雅,点击过程 会有友情提示
    浏览器执行代码 是jsp 服务端执行的是<%%>
    细谈getRequestDispatcher()与sendRedirect()的区别
    session.invalidate()
    python中的列表的嵌套与转换
    基于ajax 验证表单是否被占用----------------附:10.25日总结
    如何避免提交页面,信息未填写完善 就出现注册成功提示 基于js
  • 原文地址:https://www.cnblogs.com/littlesky1124/p/9041043.html
Copyright © 2011-2022 走看看