gpt4 book ai didi

c - 从 TCP 套接字 C 读取

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:25 25 4
gpt4 key购买 nike

我不明白为什么函数 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);

提前致谢!

最佳答案

char* msg = (char*)malloc(sizeof(char)*120);
nleft = sizeof(msg);

由于 msg 是一个 char*nleft 将是 char* 中的字节数。我不认为那是你想要的。

至于回答你真正的问题:

but I don't now how many bytes I will read, I want to ready until I reach '\n' how can I do it?

你有两个选择。糟糕的选择是一次读取一个字节,直到您读取换行符。更好的选择是尽可能多地阅读并检查换行符。如果您阅读了换行符,那太好了,这只是您在下一次通过时需要做的工作更少。在伪代码中:

  1. 如果缓冲区中没有至少一个换行符,则跳到步骤 5。

  2. 从缓冲区中提取直到第一个换行符的字节并处理它们。

  3. 将换行符后的任何字节移至缓冲区的开头,并调整缓冲区的大小以仅包含这些字节。

  4. 转到第 1 步。

  5. 执行阻塞读取并将数据附加到缓冲区。

  6. 转到第 1 步。

关于c - 从 TCP 套接字 C 读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com