【发布时间】:2013-04-23 01:02:47
【问题描述】:
我正在尝试构建一个 HTTP 客户端。到目前为止,我有一些东西需要一个 IP 地址并打印 http 响应,没问题。但是,当我尝试接受该响应并将其放入字符串中时,程序会挂起。
所以这行得通:
write(sockfd, sendBuff, strlen(sendBuff));
string s = "";
while((n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0)
{
recvBuff[n] = 0;
if(fputs(recvBuff, stdout) == EOF)
{
printf("\n Error : Fputs error\n");
}
}
这不是:
write(sockfd, sendBuff, strlen(sendBuff));
string s = "";
while((n = read(sockfd, recvBuff, sizeof(recvBuff)-1)) > 0)
{
recvBuff[n] = 0;
s.append(recvBuff, strlen(recvBuff));
}
我真的很想将整个 http 响应放入一个字符串中,因为我有一个解析整个响应的对象。任何帮助将不胜感激!
【问题讨论】:
-
为什么不直接使用
n而不是在n位置放置0,然后查看0与字符串开头的距离? -
有什么问题?除了“挂起”这个词,我没有看到任何其他信息。调试器说明了什么?和sn-p 1比较,追加后可以打印
s吗? -
该代码没问题(尽管对于
append,无需将recvBuff[n]设置为0或调用strlen,只需使用n作为第二个附加参数)。也许您的套接字在测试期间掉线了?为什么不把fputs和s.append都放进去,看看它们在特定的运行中是否对应? -
好吧,比如说我去一个小网页——上面的模式很好用。但是,如果我转到像谷歌主页这样的大型页面,我的程序将像进入无限循环一样挂起。即使放置几分钟也不会完成。
-
也许服务器没有关闭连接,以便在服务器端发生“实时”事件时推送它们