结合上图理解
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() # 关闭程序
閱讀更多 動漫資深愛好者和IT 的文章