HttpSendHttpResponse没有发送数据

时间:2015-02-03 17:04:16

标签: http winapi smalltalk httpserver

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

我从浏览器向http://localhost:50000/uri/发送GET请求,我的应用程序正确接收它。然后我使用HTTP_DATA_CHUNK在(HttpSendHttpResponse)中发送响应和一些数据,然后发送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个字节,客户端是否未收到数据?

谢谢, 塞巴斯蒂安

1 个答案:

答案 0 :(得分:1)

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

非常感谢塞巴斯蒂安