【发布时间】:2012-01-17 14:28:11
【问题描述】:
我有一个带有函数 receiveNetworkData(...) 的 C++ 应用程序。此功能对于下载 Internet 上的任何其他页面非常有用。这个 f-c 的正文在这里:
int receiveNetworkData(int socket, string *receive_data) {
int size, receive_size = 0;
char buf[BUFSIZE];
clearBuffer(buf);
receive_data->clear();
while (((size = recv(socket, buf, BUFSIZE-1, 0)) != 0) && (size != -1)) {
receive_size += size;
*receive_data += buf;
clearBuffer(buf);
}
if (size == -1) return -1;
return receive_size;
}
但是当我尝试使用此功能从 IE 获取 http 请求时。 recv 函数阻塞了程序。 我发现 IE 在两个 TCP 数据包中发送 POST 请求。这是真的,但有时 IE 只发送一个数据包。现在recv只是等待tird数据包。我不知道如何识别来自IE的消息结束。
这是从 IE9 发送请求的 JavaScript 代码。
http_zadost.open('POST', 'http://localhost:8001/', true);
http_zadost.setRequestHeader("Content-length", 5);
http_zadost.setRequestHeader("Connection", "close");
http_zadost.send("check");
【问题讨论】:
-
我不明白你的意思。套接字的一些选项?
-
您在实现 HTTP 服务器吗?如果你是,我对你的“......对下载互联网上的任何其他页面非常有用”的声明感到困惑。
标签: c++ xmlhttprequest winsock