李成笔记网

专注域名、站长SEO知识分享与实战技巧

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

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

一、数据传输

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套接字的数据传输。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言