C语言网络编程函数指南(第三篇)

十年开发一朝灵 2024-08-07 15:46:39

在前两篇文章中,我们学习了如何创建套接字、绑定地址、监听连接以及接受连接。本文是第三篇,我们将重点介绍如何使用套接字进行数据的发送和接收。

一、数据传输

1. send()和recv()函数

send()和recv()函数是网络编程中最常用的函数,用于发送和接收数据。

send()函数

ssize_t send(int sockfd, const void *buf, size_t len, int flags);sockfd:套接字文件描述符。buf:指向要发送的数据缓冲区的指针。len:要发送的数据长度。flags:发送标志,通常设置为0。

返回值:成功时返回实际发送的字节数,失败时返回-1。

recv()函数

ssize_t recv(int sockfd, void *buf, size_t len, int flags);sockfd:套接字文件描述符。buf:接收数据的缓冲区。len:缓冲区长度。flags:接收标志,通常设置为0。

返回值:成功时返回实际接收的字节数,失败时返回-1。

示例

// 发送数据if (send(client_sock, "Hello, client!", strlen("Hello, client!"), 0) == -1) { perror("send failed"); exit(EXIT_FAILURE);}// 接收数据char buffer[1024];if (recv(client_sock, buffer, sizeof(buffer), 0) == -1) { perror("recv failed"); exit(EXIT_FAILURE);}printf("Received: %s\n", buffer);

2. sendto()和recvfrom()函数

sendto()和recvfrom()函数用于发送和接收UDP数据。

sendto()函数

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);sockfd:套接字文件描述符。buf:指向要发送的数据缓冲区的指针。len:要发送的数据长度。flags:发送标志,通常设置为0。dest_addr:指向目标地址的sockaddr结构。addrlen:地址结构的长度。

recvfrom()函数

ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);sockfd:套接字文件描述符。buf:接收数据的缓冲区。len:缓冲区长度。flags:接收标志,通常设置为0。src_addr:指向源地址的sockaddr结构。addrlen:指向sockaddr结构长度的指针。

二、关闭套接字

1. close()函数

close()函数用于关闭套接字,释放相关的资源。

int close(int fd);fd:套接字文件描述符。

返回值:成功时返回0,失败时返回-1。

示例

// 关闭套接字if (close(client_sock) == -1) { perror("close failed"); exit(EXIT_FAILURE);}

三、总结

本篇文章介绍了如何使用send()和recv()函数进行TCP套接字的数据传输,以及如何使用sendto()和recvfrom()函数进行UDP套接字的数据传输。

0 阅读:1

十年开发一朝灵

简介:感谢大家的关注