21xrx.com
2024-12-22 20:57:48 Sunday
登录
文章检索 我的文章 写文章
C++ Socket接收数据(Recv)
2023-07-10 15:24:09 深夜i     --     --
C++ Socket 接收数据 Recv

在C++中,Socket作为一种实现网络通信的工具,可以通过发送和接收数据来实现两个不同的终端之间的通信。而在Socket中实现接收数据的方法,则是使用Recv函数。

Recv函数定义如下:


int recv(int sockfd, void *buf, size_t len, int flags);

其中,sockfd表示要接收数据的Socket的文件描述符;buf表示存储接收数据的缓冲区地址;len表示要接收的数据的最大长度;flags表示接收数据的标志,一般设置为0即可。

调用Recv函数后,它会将从Socket中接收到的数据存储在buf指定的缓冲区中,并返回接收到的字节数。注意,Recv函数不保证一次性能接收到所有的数据,所以在实际使用中,一般需要多次调用Recv函数来获取完整的数据。

以下是一个使用Recv函数接收数据的示例程序:


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <sys/socket.h>

#include <arpa/inet.h>

int main(int argc, char *argv[]) {

  int sockfd;

  struct sockaddr_in server_addr;

  char buf[1024];

  // 创建Socket

  sockfd = socket(AF_INET, SOCK_STREAM, 0);

  if (sockfd == -1) {

    printf("创建Socket失败!\n");

    exit(1);

  }

  // 连接服务器

  memset(&server_addr, 0, sizeof(server_addr));

  server_addr.sin_family = AF_INET;

  server_addr.sin_addr.s_addr = inet_addr(argv[1]);

  server_addr.sin_port = htons(atoi(argv[2]));

  if (connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr)) == -1) {

    printf("连接服务器失败!\n");

    exit(1);

  }

  // 接收数据

  while (1) {

    int len = recv(sockfd, buf, sizeof(buf), 0);

    if (len == -1) {

      printf("接收数据失败!\n");

      exit(1);

    } else if (len == 0) {

      printf("对方已关闭连接!\n");

      break;

    } else {

      buf[len] = '\0'; // 添加字符串结束符

      printf("接收到数据:%s\n", buf);

    }

  }

  // 关闭Socket

  close(sockfd);

  return 0;

}

在该示例程序中,我们先创建了一个Socket,并与服务器建立连接,然后通过while循环不断地调用Recv函数来接收从服务器传来的数据,并将接收到的数据输出到屏幕上。当对方关闭连接后,程序会自动退出。

总之,Recv函数是Socket中接收数据的重要方法,对于编写实现网络通信的程序而言是必不可少的工具。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复