Python 网络编程

1. 网络基础

网络编程是指通过计算机网络进行信息交换与通信的技术。网络通信依赖于网络协议,网络协议规定了数据传输的格式、方法以及数据交互的规则。在计算机网络中,最常见的两种通信协议是 TCP 和 UDP。

1.1 TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的协议,提供可靠的、按顺序到达的通信服务。TCP 协议通过三次握手建立连接,并通过四次挥手断开连接。其主要特点如下:

  • 面向连接:TCP 需要在数据传输前建立连接。数据传输之前,发送方和接收方需要通过三次握手来确认连接的可靠性。
  • 可靠性:TCP 通过序列号、确认应答、重传机制等方式保证数据的可靠传输。如果数据丢失或损坏,TCP 会自动进行重传。
  • 流量控制:TCP 通过滑动窗口技术来控制数据传输速率,防止接收方处理不过来数据。
  • 有序性:数据包的接收顺序由TCP 保证,接收方会按序号将数据重新组装。

在实际应用中,TCP 适合于那些对数据的可靠性和顺序性有严格要求的场景,例如文件传输、电子邮件等。

1.2 UDP协议

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的协议,它的主要特点是简单、快速,但不保证数据的可靠性和顺序。UDP 协议的主要特点如下:

  • 无连接:UDP 不需要建立连接,因此通信双方无需进行握手,
  • 不可靠传输:UDP 不提供确认应答机制,也不保证数据到达的顺序,可能会丢包或出现乱序的情况。
  • 速度较快:由于不需要建立连接和处理数据传输的复杂性,UDP 在传输过程中速度较快,适合用于实时性要求较高的应用场景。
  • 适用于广播和多播:UDP 支持广播和多播,可以在网络中同时向多个接收方发送数据。

UDP 适用于那些对实时性要求较高,但不要求数据可靠性保障的场景,例如在线游戏、视频会议等。

1.3 Socket 简介

Socket 是网络通信的基础,是实现网络编程的抽象层。在 Python 中,socket 模块提供了对 Socket 的封装,使得我们可以轻松实现 TCP 和 UDP 通信。Socket 接口提供了发送、接收、连接、断开等操作,允许我们在程序中实现网络通信。

  • IPv4 和 IPv6:Socket 支持 IPv4 和 IPv6 协议,通过指定不同的地址族(AF INET 表示 IPv4,AF INET6 表示 IPv6)可以支持不同的网络环境。
  • 协议类型:Python 的 Socket 模块支持两种主要的协议类型:SOCK STREAM 表示 TCP 协议,SOCK DGRAM 表示 UDP 协议。

2. TCP编程

在 TCP 编程中,客户端和服务器之间的通信需要经过连接的建立和断开。以下是基于 Python 实现 TCP 客户端和服务器的示例。

2.1 TCP 客户端示例

解释:

  • socket.socket(socket.AF INET,Socket,SOCK STREAM):创建一个TCP 客户端 Socket,使用IPv4 地址族(AF INET)和TCP 协议(SOCK STREAM)。
  •  client_socket,connect(('192.168.10.101',1472)):通过 IP 地址和端口连接到服务器。
  • client socket.send():将数据发送到服务器,数据需要进行编码(encode('utf-8'))。
  • client_socket.recv():接收来自服务器的数据,最多接收 1024 字节。
  • client socket.close():关闭客户端 Socket 连接。

2.2 TCP 服务器示例

解释:

  • server_socket.bind(('192.168.10.101', 1472)): 绑定服务器的IP地址和端口
  • server_socket.listen(5):  开始监听连接,最大连接数为5。
  • server_socket.accept():接受客户端连接。
  • client socket.recv(1024):接收客户端消息。
  • client socket.send(b'Hello,client'):向客户端发送响应消息。
  • client socket.close():关闭与客户端的连接。

3. UDP编程

UDP 编程与 TCP 编程的最大区别在于 UDP 不需要建立连接,客户端和服务器直接发送和接收数据。

3.1 UDP 客户端示例

解释:

  • socket.socket(socket.AF INET, socket.SOCK DGRAM): 创建 UDP 客户端 socket.
  • client socket,sendto():发送数据到指定的目标地址和端口。
  • client_socket.recvfrom():接收来自服务器的响应,返回接收到的数据和服务器地址。

3.2 UDP 服务器示例

解释:

  • server socket,bind(('192.168.10.101',6541)):绑定服务器的 IP 地址和端口。
  • server socket.recvfrom(1024):接收来自客户端的数据,并返回数据和客户端地址。
  • server_socket,sendto():向指定客户端地址发送响应数据。

4. 小案例:简易聊天软件

以下是一个简单是 TCP 聊天软件,客户端和服务器通过 TCP 协议进行通信,客户端发送消息,
服务器接收并返回响应。

4.1 TCP 聊天客户端

4.2 TCP 聊天服务器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值