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)