Cesanta Mongoose - 连接到本地主机时出现问题
Cesanta Mongoose - problems when connecting to localhost
我在使用 Cesanta Mongoose Web 服务器库构建 HTTP 服务器时遇到问题。当我构建了一个 HTTP 服务器来侦听端口 8080 并且客户端向 localhost:8080 发送 HTTP 请求时,我遇到了问题。问题是服务器处理请求很好并发回响应,但客户端仅在我杀死服务器进程后处理和打印响应。基本上,Mongoose 的工作原理是创建采用事件处理程序函数 ev_handler(( 的连接。每当 发生"事件",例如收到请求或回复。在服务器端,事件处理程序函数在收到来自 8080 上的客户端的请求时被调用 fine。但是,客户端事件处理程序函数在响应发送回复时不调用,而仅在服务器进程被终止后调用。我怀疑这可能与连接在本地主机上的事实有关,我是对的 - 当客户端向本地主机以外的地址发送请求时,不会发生此问题。事件处理程序函数称为 fine。以下是客户端的ev_handler函数供参考:
static void ev_handler(struct mg_connection *c, int ev, void *p) {
if (ev == MG_EV_HTTP_REPLY) {
struct http_message *hm = (struct http_message *)p;
c->flags |= MG_F_CLOSE_IMMEDIATELY;
fwrite(hm->message.p, 1, (int)hm->message.len, stdout);
putchar('n');
exit_flag = 1;
} else if (ev == MG_EV_CLOSE) {
exit_flag = 1;
};
}
尝试在本地主机上与同一台计算机上的服务器建立连接时,这是一个常见问题吗?
这种行为的原因是客户端连接在读取所有数据之前不会触发事件。客户端如何知道所有数据都被读取?有3种可能性:
- 服务器已发送
Content-Length: XXX
标头,客户端已读取邮件正文的 XXX 字节,因此它知道它收到了所有内容。 - 服务器已发送
Transfer-Encoding: chunked
标头,并发送了所有数据块,后跟一个空块。当客户端收到空块时,它知道它收到了所有内容。 - 服务器既不设置
Content-Lenth
,也不设置Transfer-Encoding
。在这种情况下,客户端不知道正文的大小,并且它会一直读取,直到服务器关闭连接。
你看到的是(3(。解决方案:在服务器代码中设置Content-Length
。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- Cesanta Mongoose - 连接到本地主机时出现问题
- 为什么主机不显示?(C++和代码处理器问题)
- 从远程主机中编译C 11代码的问题
- C++:运行时将共享对象与主机应用程序链接,符号表问题
- 在将复杂数据从主机传输到设备的简单 CUDA 代码中出现问题
- 彭博 API 连接问题 - <本地主机:8194> 连接失败