HttpSendHttpResponse 没有发送数据

标签 http winapi smalltalk httpserver

我正在使用 Ms http server api v2(在同步模式下)实现一个网络服务器,我正在尝试从网络浏览器对其进行测试。

我从浏览器发送一个 GET 请求到 http://localhost:50000/uri/并且我的应用程序正确接收了它。然后我使用 HttpSendHttpResponse 发送响应,在 (HTTP_DATA_CHUNK) 中包含一些数据,我收到了 131 个字节。但是,浏览器没有收到任何数据。 我还使用 wininet 客户端对其进行了测试,结果相同。

这是我的发送响应代码 (Smalltalk):

sendResponse: aString
    | data response sent id return |
    data := HTTP_DATA_CHUNK external 
    data 
        DataChunkType: 0;
        pBuffer: aString copyToExternalMemory;
        BufferLength: aString size.
    response := HTTP_RESPONSE_V2 external.
    response
        version1;
        StatusCode: HTTP_STATUS_OK;
        reason: 'Ok';
        ContentType: 'text/html';
        EntityChunkCount: 1;
        dataChunk: data.
    sent := ExternalLong external.
    return := HttpServerDLL current
        HttpSendHttpResponse: handle
        RequestId: request id
        Flags: 0
        pHttpResponse: response asParameter
        pCachePolicy: 0
        pBytesSent: sent asParameter
        pReserved2: 0
        Reserved3: 0
        pOverlapped: 0
        pLogData: 0.
    return = 0 ifFalse: [^self osError: return].
    ^sent asInteger 

知道为什么如果 HttpSendHttpResponse 函数成功并指示已发送 n 个字节,但客户端没有收到数据吗?

谢谢, 塞巴斯蒂安

最佳答案

我已经找到问题了。我在 HTTP_DATA_CHUNK 结构的对齐中有一个错误,因为一些字段是 8 字节对齐的,所以数据指针处于错误的偏移量中。 修复此问题后,我再次尝试仅使用 HttpSendHttpResponse 但没有成功,然后同时使用 HttpSendHttpResponse header 和 HttpSendHttpResponseEntityBody 数据,它有效!也许是 MSDN sample已经过时了。在那里,数据与响应一起发送到 HttpSendHttpResponse 的单个调用中。

非常感谢你,塞巴斯蒂安

关于HttpSendHttpResponse 没有发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28304640/

相关文章:

c++ - 高级 Win32 图像文件 I/O?

将 Windows 设备文件名转换为驱动器号

multithreading - 什么是特定于流程的变量?

user-interface - Pharo 的 UI 主题存储库?

http - Golang http.PostParam 未在响应中显示所有 Cookie

http - 覆盖 Go 的默认 HTTP 服务器重定向行为

c++ - 如何判断一个线程是否有消息队列?

macos - Mac OS X Lion (10.7) 上带有 GUI 的 Smalltalk

http - 请求的 URL 长度超过了该服务器的容量限制?

http - 如何检查一个 HTTP 客户端是否仍然连接到 asp.net core 中的服务器?