TCP和UDP协议的区别以及使用Python的socket库进行TCP客户端和服务器通信的示例

TCP和UDP协议的区别

TCP(传输控制协议)UDP(用户数据报协议) 是两种在网络中常用的传输层协议,它们的主要区别如下:

  1. 可靠性
    • TCP 是面向连接的协议,提供可靠的、面向连接的数据传输服务。TCP 在传输数据之前,会通过三次握手建立连接,并在数据传输结束后通过四次挥手来关闭连接。TCP 会确保数据包的顺序、完整性,并且会处理丢包和重传等问题。
    • UDP 是无连接的协议,不保证数据的可靠性。UDP 发送数据前不需要建立连接,每个数据报都是一个独立的信息,系统不保留数据报的边界,也不进行数据报的排序和重组。如果数据包在传输过程中丢失或出错,UDP 不会进行任何处理。
  2. 开销
    • TCP 的开销相对较大,因为它需要建立连接和进行错误检查等额外操作。
    • UDP 的开销较小,因为它没有连接建立和错误检查等机制。
  3. 应用场景
    • TCP 适用于需要可靠传输的应用场景,如文件传输、网页浏览等。
    • UDP 适用于对实时性要求较高、但可以接受数据丢失的应用场景,如视频直播、实时游戏等。

Python Socket库TCP客户端和服务器通信示例

下面是一个简单的使用Python的socket库进行TCP客户端和服务器通信的示例。

TCP服务器示例
复制代码

python复制代码

|---|----------------------------------------------------------------------|
| | import socket |
| | |
| | def tcp_server(): |
| | # 创建 socket 对象 |
| | server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| | |
| | # 获取本地主机名 |
| | host = socket.gethostname() |
| | |
| | port = 12345 # 设置端口号 |
| | |
| | # 绑定端口号 |
| | server_socket.bind((host, port)) |
| | |
| | # 设置最大连接数,超过后排队 |
| | server_socket.listen(5) |
| | |
| | while True: |
| | # 建立客户端连接 |
| | client_socket, addr = server_socket.accept() |
| | |
| | print("连接地址: %s" % str(addr)) |
| | |
| | msg = '欢迎访问菜鸟教程!' + "\r\n" |
| | client_socket.send(msg.encode('utf-8')) |
| | client_socket.close() |
| | |
| | if __name__ == '__main__': |
| | tcp_server() |

TCP客户端示例
复制代码

python复制代码

|---|----------------------------------------------------------------------|
| | import socket |
| | |
| | def tcp_client(): |
| | # 创建 socket 对象 |
| | client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| | |
| | # 获取本地主机名 |
| | host = socket.gethostname() |
| | |
| | port = 12345 # 设置端口号 |
| | |
| | # 连接服务,指定主机和端口 |
| | client_socket.connect((host, port)) |
| | |
| | # 接收小于 1024 字节的数据 |
| | msg = client_socket.recv(1024) |
| | |
| | client_socket.close() |
| | |
| | print(msg.decode('utf-8')) |
| | |
| | if __name__ == '__main__': |
| | tcp_client() |

注意:在实际使用中,你可能需要将服务器和客户端运行在不同的机器上,或者至少在不同的端口上,以避免端口冲突。此外,上面的服务器示例在接收消息后立即关闭了连接,这在实际应用中可能不是你所期望的。你可能需要实现一个循环来持续监听客户端的消息。同样,客户端示例在接收一次消息后就关闭了连接,如果你需要发送多条消息,你需要在客户端也实现一个循环。

相关推荐
大数据追光猿20 分钟前
【深度学习】Pytorch项目实战-基于协同过滤实现物品推荐系统
人工智能·pytorch·python·深度学习·ai编程·推荐算法
师范大学生29 分钟前
基于CNN的FashionMNIST数据集识别2——模型训练
python·深度学习·cnn
web1376560764337 分钟前
纯 Python、Django、FastAPI、Flask、Pyramid、Jupyter、dbt 解析和差异分析
python·django·fastapi
大模型铲屎官40 分钟前
哈希表入门到精通:从原理到 Python 实现全解析
开发语言·数据结构·python·算法·哈希算法·哈希表
qq4054251971 小时前
基于python的旅客游记和轨迹分析可视化系统设计(新)
开发语言·python
m0_594526302 小时前
基于 PyQt5 实现分组列表滚动吸顶效果
开发语言·python·qt
thinkMoreAndDoMore3 小时前
深度学习(3)-TensorFlow入门(常数张量和变量)
开发语言·人工智能·python
kngines3 小时前
【Python量化金融实战】-第1章:Python量化金融概述:1.4 开发环境搭建:Jupyter Notebook、VS Code、PyCharm
python·量化金融
kngines3 小时前
【Python量化金融实战】-第1章:Python量化金融概述:1.2 Python在量化金融中的优势与生态
python·量化金融
wapicn993 小时前
‌挖数据平台对接DeepSeek推出一键云端部署功能:API接口驱动金融、汽车等行业智能化升级
java·人工智能·python·金融·汽车·php