【基础】简单的TCP_UDP网络编程
发布时间: 2024-06-27 15:36:58 阅读量: 5 订阅数: 23 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![python自动化运维合集](https://img-blog.csdnimg.cn/3cdd6090a9154280948ff93a7f49916e.png)
# 2.1 TCP/UDP协议简介
### 2.1.1 TCP协议特点
TCP(传输控制协议)是一种面向连接、可靠的传输层协议。其特点包括:
- **面向连接:**在数据传输前,需要先建立TCP连接,双方协商好传输参数。
- **可靠传输:**TCP采用滑动窗口和重传机制,保证数据按序、无差错地传输。
- **流量控制:**TCP通过滑动窗口机制,控制发送端发送数据的速率,避免接收端接收缓冲区溢出。
- **拥塞控制:**TCP采用拥塞窗口机制,动态调整发送窗口大小,避免网络拥塞。
# 2. TCP/UDP网络编程实战
### 2.1 TCP/UDP协议简介
#### 2.1.1 TCP协议特点
TCP(传输控制协议)是一种面向连接、可靠的传输层协议。其主要特点包括:
- **面向连接:**TCP在数据传输前需要建立连接,确保数据传输的可靠性和有序性。
- **可靠性:**TCP采用三次握手建立连接,并使用序列号和确认机制保证数据传输的完整性和正确性。
- **有序性:**TCP保证数据按照发送顺序接收,避免数据乱序。
- **流量控制:**TCP通过滑动窗口机制控制发送和接收数据的速率,避免网络拥塞。
- **拥塞控制:**TCP采用拥塞窗口机制动态调整发送窗口大小,避免网络拥塞。
#### 2.1.2 UDP协议特点
UDP(用户数据报协议)是一种无连接、不可靠的传输层协议。其主要特点包括:
- **无连接:**UDP不需要建立连接,数据直接发送到目标地址。
- **不可靠性:**UDP不保证数据传输的完整性、正确性和有序性。
- **低开销:**UDP的协议开销较小,适合传输少量数据。
- **实时性:**UDP不使用流量控制和拥塞控制,数据传输具有较高的实时性。
### 2.2 TCP/UDP套接字编程
#### 2.2.1 套接字创建和绑定
套接字是应用程序与网络通信的接口。创建套接字需要指定协议类型(TCP或UDP)、地址族(IPv4或IPv6)和端口号。
```python
import socket
# 创建一个TCP套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 创建一个UDP套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定TCP套接字到指定地址和端口
tcp_socket.bind(('127.0.0.1', 8080))
# 绑定UDP套接字到指定地址和端口
udp_socket.bind(('127.0.0.1', 8081))
```
#### 2.2.2 TCP/UDP连接建立和关闭
对于TCP协议,需要建立连接才能进行数据传输。连接建立过程如下:
```
1. 客户端发送SYN(同步)报文
2. 服务器收到SYN报文后,发送SYN+ACK(同步确认)报文
3. 客户端收到SYN+ACK报文后,发送ACK(确认)报文
```
连接建立后,双方就可以进行数据传输。连接关闭过程如下:
```
1. 一方发送FIN(结束)报文
2. 另一方收到FIN报文后,发送ACK(确认)报文
3. 发送FIN的一方收到ACK报文后,关闭连接
```
对于UDP协议,不需要建立连接,直接发送数据即可。
### 2.3 TCP/UDP数据收发
#### 2.3.1 TCP数据收发
TCP数据收发使用`send()`和`recv()`函数。
```python
# 发送TCP数据
tcp_socket.send(b'Hello, world!')
# 接收TCP数据
data = tcp_socket.recv(1024)
```
#### 2.3.2 UDP数据收发
UDP数据收发使用`sendto()`和`recvfrom()`函数。
```python
# 发送UDP数据
udp_socket.sendto(b'Hello, world!', ('127.0.0.1', 8081))
# 接收UDP数据
data, addr = udp_socket.recvfrom(1024)
```
# 3. TCP/UDP网络编程应用
### 3.1 TCP/UDP客户端编程
TCP/UDP客户端是网络编程中至关重要的组件,负责与服务器建立连接并发送或接收数据。本章节将深入探讨TCP和UDP客户端的实现。
#### 3.1.1 TCP客户端实现
TCP客户端建立连接后,可以可靠地发送和接收数据。以下代码演示了TCP客户端的实现:
```python
import socket
# 创建TCP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
server_address = ('127.0.0.1', 8080)
client_socket.connect(server_address)
# 发送数据
data = b'Hello, server!'
client_socket.sendall(data)
# 接收数据
data = client_socket.recv(1024)
print(f'Received data from server: {data.decode()}')
# 关闭套接字
client_socket.close()
```
**逻辑分析:**
1. `socket.socket()` 创建一个TCP套接字。
2. `client_socket.connect()` 连接到服务器,传入服务器地址和端口。
3. `client_socket.sendall()` 发送数据到服务器。
4. `client_socket.recv()` 接收来自服务器的数据。
5. `client_socket.close()` 关闭套接字。
#### 3.1.2 UDP客户端实现
UDP客户端以无连接的方式发送数据,适用于不需要可靠性的应用。以下代码演示了UDP客户端的实现:
```python
import socket
# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 发送数据
server_address = ('127.0.0.1', 8080)
data = b'Hello, server!'
client_
```
0
0
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)