1

我对 c++ 很陌生,并尝试了一些套接字编程。我的问题是,我不能x = recv((SOCKET)this->sock, ausgabe, 1000, 0);一次只返回一行,这些行被\n\r.

我尝试过类似的东西:

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

但这不会按预期工作。我希望你知道这个问题并得到一个解决方案来帮助我。

问候,弗雷德里克

4

2 回答 2

2

您可以一次读取一个字节并检查“\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

For more information on tokenization http://www.cplusplus.com/reference/clibrary/cstring/strtok/

于 2012-04-29T11:13:05.053 回答