• day32作业


    1、深入理解TCP三次握手、四次挥手逻辑

    TCP创建链接使用三次握手的原因,第一次客户端发送请求给服务器端建立连接,第二次服务端发送建立连接的同意信息和测试信息,第三次客户端发送正确测试信息给服务端。客户端和服务端正式建立连接。

    TCP四次挥手的原因:第一次客户端发送断开连接的请求,第二次服务端发送接到结束请求,第三次服务端发送验证数据完整性验证的请求,第四次服务端发送数据已完整的消息,客户端和服务端正式断开连接。

    2、编写基于TCP协议通信的套接字,加上通信循环

    服务端

    import socket
    #建立一个TCP 对象
    tcp_server = socket.socket()
    #绑定ip与port号
    tcp_server.bind(("127.0.0.1",2233))
    #最大监听3个未连接目标
    tcp_server.listen(3)
    #等待接受连接请求,连接发生后,生成后连接对象和ip地址
    client,address = tcp_server.accept()
    while True:
        #接受二进制的信息()内为限制最大接受值
        msg = client.recv(1024).decode("utf-8")
        print(msg)
        if  msg == "over":
            print("结束本次连接")
            client.close()
            break
        client.send(msg.upper().encode("utf-8"))

    客户端

    import socket
    
    client = socket.socket()
    client.connect(("127.0.0.1",2233))
    
    while True:
        msg = input("发送请求:").encode("utf-8")
        client.send(msg)
        getmsg = client.recv(1024).decode("utf-8")
        print(getmsg)
        if not getmsg:
            client.close()
            break

    3、编写C/S架构的程序,实现远程执行命令,思路如下
    1、客户端接收用户输入的命令,然后发送给服务端,
    2、服务端根据传来的数据调用subprocess模块执行系统命令,然后将结果返回给客户端,在客户端打印

    import socket
    import subprocess
    server = socket.socket()
    server.bind(("127.0.0.1",6666))
    server.listen(6)
    
    while True:
        client, address = server.accept()
        cmd = client.recv(1024).decode("utf-8")
        if cmd == "over":
            client.close()
            break
        res = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE)
        stderr = res.stderr.read()
        stdout = res.stdout.read()
        client.send(stderr)
        client.send(stdout)

    服务端

    客户端

    import socket
    client = socket.socket()
    client.connect(("127.0.0.1",6666))
    
    while True:
        cmd = input("cmd:>>")
        if len(cmd) == 0:continue
        if cmd == "quit":break
        client.send(cmd.encode("utf-8"))
        msg = client.recv(1024*10).decode("GBK")
        print(msg)
  • 相关阅读:
    弹出层
    浅析.Net下的多线程编程
    网站新闻模块中应用装饰模式
    通过MVC模式将Web视图和逻辑代码分离
    得到任意网页源代码 (利用WebClient和WebRequest类)
    ASP.NET网站部署问题集
    什么是url重写
    C#基础概念二十五问(一)
    ASP.NET Memory:如果你的应用已经在生产环境中,那为什么还要debug=true
    Go Gob编码
  • 原文地址:https://www.cnblogs.com/msj513/p/9898283.html
Copyright © 2020-2023  润新知