【基础】使用socket库进行UDP编程
发布时间: 2024-06-26 02:53:19 阅读量: 7 订阅数: 30
![【基础】使用socket库进行UDP编程](https://img-blog.csdn.net/20170429222104457?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzUyNTY3MjI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
# 2.1 Socket的基本操作
Socket库提供了丰富的操作函数,用于创建、配置和管理Socket。下面介绍一些常用的Socket基本操作:
```c++
// 创建一个Socket
int socket(int domain, int type, int protocol);
// 绑定Socket到一个地址和端口
int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
// 监听Socket,等待客户端连接
int listen(int sockfd, int backlog);
// 接受客户端连接
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
// 连接到一个远程Socket
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
// 发送数据
int send(int sockfd, const void *buf, size_t len, int flags);
// 接收数据
int recv(int sockfd, void *buf, size_t len, int flags);
// 关闭Socket
int close(int sockfd);
```
# 2. Socket库基本概念
### 2.1 Socket的基本操作
Socket库提供了一组函数,用于创建、配置和管理Socket。这些函数包括:
- `socket()`:创建新的Socket。
- `bind()`:将Socket绑定到特定的地址和端口。
- `listen()`:将Socket设置为监听状态,等待客户端连接。
- `accept()`:接受客户端连接,并返回一个新的Socket用于与客户端通信。
- `connect()`:连接到远程Socket。
- `send()`:向远程Socket发送数据。
- `recv()`:从远程Socket接收数据。
- `close()`:关闭Socket。
### 2.2 Socket的地址和端口
Socket地址由两部分组成:IP地址和端口号。IP地址标识网络上的设备,端口号标识设备上的特定服务或应用程序。
- **IP地址**:IP地址是分配给网络设备的唯一标识符。它可以是IPv4地址(如192.168.1.1)或IPv6地址(如2001:0db8:85a3:08d3:1319:8a2e:0370:7334)。
- **端口号**:端口号是分配给特定应用程序或服务的数字标识符。它用于将传入数据路由到正确的应用程序或服务。常见的端口号包括80(HTTP)、443(HTTPS)、21(FTP)和25(SMTP)。
### 2.3 Socket的类型和协议
Socket可以分为两种类型:流式Socket和数据报式Socket。
- **流式Socket**:流式Socket提供可靠、有序的数据传输。数据以字节流的形式发送和接收,并且在发送端和接收端之间保持顺序。
- **数据报式Socket**:数据报式Socket提供不可靠、无序的数据传输。数据以数据包的形式发送和接收,并且可能以与发送顺序不同的顺序到达接收端。
Socket还可以使用不同的协议,包括TCP和UDP。
- **TCP(传输控制协议)**:TCP是一种可靠的、面向连接的协议,用于在两个设备之间建立虚拟电路。它提供错误检测和重传机制,确保数据可靠地传输。
- **UDP(用户数据报协议)**:UDP是一种不可靠的、无连接的协议,用于在两个设备之间发送数据包。它不提供错误检测和重传机制,但具有低延迟和高吞吐量的优点。
**代码块示例:**
```python
import socket
# 创建一个TCP流式Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 将Socket绑定到本地地址和端口
sock
```
0
0