我对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");
}
但这不会按预期工作。我希望你知道这个问题并找到了解决方案来帮助我。
问候, 弗雷德里克
答案 0 :(得分:2)
您可以一次读取一个字节并检查'\ r \ n',但效率非常低。
您应该始终从套接字到缓冲区读取尽可能多的字节,然后使用strstr()解析缓冲区。
是UDP之类的数据报套接字还是TCP之类的流套接字?他们是不同的。
答案 1 :(得分: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/
的详细信息