我不明白为什么函数read总是返回-1。我想从套接字读取,直到'\ n'出现!
char* msg = (char*)malloc(sizeof(char)*120);
nleft = sizeof(msg);
while(nleft>0){
n = read(fdTcp, msg, nleft);
if(n == -1){
printf("error reading UPC\n");
exit(1); //error
}
else if (n == 0){
printf("end of reading EOF\n");
break; //closed by peer
}
nleft-=n;
msg += n;
}
nread = n-nleft;
msg[nread] = '\0';
printf("mensagem do CS: %s\n", msg);
提前致谢!
答案 0 :(得分:2)
char* msg = (char*)malloc(sizeof(char)*120);
nleft = sizeof(msg);
由于msg
是char*
,nleft
将是char*
中的字节数。我认为这不是你想要的。
至于回答你的真实问题:
但我现在不会读到多少字节,我想准备好直到我到达'\ n'我该怎么办?
你有两个选择。可怕的选择是一次读取一个字节,直到您读取换行符。更好的选择是尽可能多地阅读并检查换行符。如果你读过新行,那就太好了,那就是你下次通行时不得不做的工作。在伪代码中:
如果缓冲区中至少有一个换行符,请跳至步骤5.
从缓冲区中提取字符到第一个换行符并处理它们。
将任何超过换行符的字节移动到缓冲区的开头,并调整缓冲区的大小以包含那些字节。
转到第1步。
执行阻塞读取并将数据附加到缓冲区。
转到第1步。
答案 1 :(得分:0)
我假设您的套接字成功打开套接字连接。 然后文件discriptor为1表示准备好读取数据。您尝试读取套接字,但是您使用了-1的错误。 通常,当套接字关闭时会出现此错误。如果你取-1,socket就关闭了。如果取0表示读取套接字数据超时。另一方面,如果你花费超过0这意味着,读取多少字节。