1

私はc ++を初めて使用し、いくつかのソケットプログラミングを試みています。これに関する私の問題は、x = recv((SOCKET)this->sock, ausgabe, 1000, 0);一度に1行しか返すことができないことです.行は\n\r.

私は次のようなものを試しました:

        char * pos;
        pos = strstr(ausgabe, "\n");
        while(pos != NULL){
            std::cout<< pos;
            pos = strstr(pos, "\n");
        }

しかし、これは期待どおりに機能しません。あなたがこの問題を知っていて、私を助けるための解決策を得たことを願っています.

ごきげんよう、フレデリック

4

2 に答える 2

2

一度に 1 バイトずつ読み取って '\r\n' をチェックすることはできますが、これは非常に非効率的です。

ソケットからバッファーにできるだけ多くのバイトを常に読み取り、strstr() を使用してバッファーを解析する必要があります。

UDP のようなデータグラム ソケットまたは TCP のようなストリーム ソケットですか? それらは違う。

于 2012-04-29T11:09:58.283 に答える
1

トークンライブラリを使用できます。

#include <string.h>
.
.
char *line = strtok(ausgabe,"\n");
while (line != NULL)
{
    line[strlen(line)-1] = '\0';    // if newline character is \r\n
    cout << line;
    line = strtok(NULL, "\n");
    // line++; // ignore \r         // if newline character is \n\r
}

デモ:http ://codepad.org/DYL1bjtb

トークン化の詳細については、http: //www.cplusplus.com/reference/clibrary/cstring/strtok/を参照してください。

于 2012-04-29T11:13:05.053 に答える