• 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)
  • 相关阅读:
    POJ3094 UVALive3594 HDU2734 ZOJ2812 Quicksum【进制】
    UVALive5583 UVA562 Dividing coins
    POJ1979 HDU1312 Red and Black【DFS】
    POJ1979 HDU1312 Red and Black【DFS】
    POJ2386 Lake Counting【DFS】
    POJ2386 Lake Counting【DFS】
    HDU4394 Digital Square
    HDU4394 Digital Square
    UVA213 UVALive5152 Message Decoding
    UVA213 UVALive5152 Message Decoding
  • 原文地址:https://www.cnblogs.com/msj513/p/9898283.html
Copyright © 2020-2023  润新知