从socket读取到basic_filebuf

时间:2012-04-18 10:59:34

标签: c++ sockets client

来自客户端部分的代码(使用

   struct sockaddr_in stSockAddr;
   int Res;
   int SocketFD;
   SocketFD = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (-1 == SocketFD)
   {
      perror("cannot create socket");
      exit(EXIT_FAILURE);
   }

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

    stSockAddr.sin_family = AF_INET;
    stSockAddr.sin_port = htons(8182);
    Res = inet_pton(AF_INET, "127.0.0.1", &stSockAddr.sin_addr);    

我使用

从服务器获得响应
   char buffer[4096] = "";
   n = read(aSocketFD, buffer, 4096);  

我的任务是:
我可以像 std :: basic_filebuf 那样得到答案吗?或者我可以对FILE *做出回应吗? Socket是一个文件处理程序,所以我可以做到,但是怎么做?

3 个答案:

答案 0 :(得分:1)

对于 C代码,您可以使用像FILE *这样的描述符来调用fdopen():将流与文件描述符(POSIX.1标准)相关联。

答案 1 :(得分:0)

如果您因为想要表现良好而提出此问题:

在linux上你可以使用sendfile,这适用于简单的文件描述符(fd):

ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

其他一些unix系统也支持这个API调用,但它不是POSIX的一部分,所以它不可移植。

答案 2 :(得分:0)

我认为你需要继承std::streambuf以实现你想要的目标。