0

クライアント部分からのコードです()。

   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はファイルハンドラーなので、私はそれを行うことができますが、どうすればよいですか?

4

3 に答える 3

1

Cコードの場合、fdopen()を呼び出すFILE *のような記述子を使用できます。ストリームをファイル記述子(POSIX.1標準)に関連付けます。

于 2012-04-18T12:04:23.623 に答える
0

優れたパフォーマンスが必要なためにこれを尋ねた場合:

Linuxでは、を使用できますsendfile。これは、単純なファイル記述子(fd)で機能します。

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

他のいくつかのUNIXシステムもこのAPI呼び出しをサポートしていますが、POSIXの一部ではないため、移植性はありません。

于 2012-04-18T11:10:13.150 に答える
0

私はあなたがstd::streambuf望むものを達成するためにサブクラス化する必要があると思います。

于 2012-04-18T11:18:08.183 に答える