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()

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

相关推荐

  1. C++ TCP 服务客户通信例子

    2024-07-23 08:38:01       28 阅读
  2. TCPUDP区别

    2024-07-23 08:38:01       57 阅读
  3. TCP UDP 区别

    2024-07-23 08:38:01       47 阅读
  4. TCP UDP区别

    2024-07-23 08:38:01       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 08:38:01       60 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 08:38:01       63 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 08:38:01       51 阅读
  4. Python语言-面向对象

    2024-07-23 08:38:01       62 阅读

热门阅读

  1. Electron 和 React 开发桌面应用程序

    2024-07-23 08:38:01       19 阅读
  2. (20240721)无机非金属材料工学(3)混凝土

    2024-07-23 08:38:01       16 阅读
  3. golang长连接的误用

    2024-07-23 08:38:01       17 阅读
  4. ubuntu开启 远程登录 允许root远程登录

    2024-07-23 08:38:01       17 阅读
  5. P1725 琪露诺 题解

    2024-07-23 08:38:01       19 阅读
  6. Qt 实战(7)元对象系统 | 7.6、Q_DECLARE_METATYPE详解

    2024-07-23 08:38:01       18 阅读
  7. php 根据位置的经纬度计算距离

    2024-07-23 08:38:01       16 阅读
  8. 【git】切换到远程其他分支

    2024-07-23 08:38:01       17 阅读
  9. CentOS 6.8 中部署 Spring Boot 应用程序

    2024-07-23 08:38:01       19 阅读