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)

猜你喜欢

转载自www.cnblogs.com/msj513/p/9898283.html