2、TCP三次握手和四次挥手


2、TCP三次握手和四次挥手


结合上图理解

TCP发送的每个报文都必须得接受到对方的应答才认为这个TCP报文传输成功;

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2018/3/2 15:12

# @Author : CaiChangEn

# @Software: PyCharm

# 服务端

import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # SOCK_STREAM:基于TCP协议 AF_INET(地址家族):网络socket通信

phone.bind(('127.0.0.1',8080)) # 绑定地址

phone.listen(5) # 最大连接数,半连接连接池的大小,适当调整,防止洪水攻击,backlog

conn,addr=phone.accept() # 拿到一个连接和地址,相当于已经建立了一个TCP双向连接;就是在建立三次握手,三次握手的结果会返回一个元祖,一个是连接(可以基于这个连接进行数据传输,这个连接就是TCP建立的双向连接,客户端到服务端一条线,服务端到客户端一条线),一个是地址

msg=conn.recv(1024) # 接收信息,1024是接受的字节

print('客户端发来的消息是[%s]' %msg.decode('utf-8'))

conn.send(msg.upper()) # 发送消息

conn.close() # 关闭连接,就是关闭TCP三次握手,所以这一步就是触发四次挥手

phone.close() # 关闭socket程序

# 客户端

#!/usr/bin/env python

# -*- coding: utf-8 -*-

# @Time : 2018/3/2 15:12

# @Author : CaiChangEn

# @Software: PyCharm

import socket

phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

phone.connect(('127.0.0.1',8080)) # 连接本地的服务端

phone.send('hello'.encode('utf-8')) # 发送消息

msg=phone.recv(1024) # 收消息

print('服务端发来的消息是[%s]' %msg.decode('utf-8'))

phone.close() # 关闭程序


分享到:


相關文章: