IIS6.0中接收客户端发送的POST数据问题

哈利路亚1874 2010-10-24 05:09:05
我在客户端通过Socket连接到IIS6.0的80端口,然后采用循环不停的POST数据到IIS服务器,在IIS开发了一个扩展Dll,其中接收数据部分:

DWORD CIISExtendExtension::HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pecb)
{
DebgPrint("Begin HttpExtensionProc!\n");
DWORD dwLen = 0;
BOOL retn = FALSE;
DWORD dwPostSize = 0;
DWORD dwThreadId = 0;
Thread_Param *param;
char *postDataBuffer = NULL;
HSE_EXEC_URL_INFO ExecUrlInfo = {0};
HSE_EXEC_URL_ENTITY_INFO *pEntity = NULL;

//获取URL
pecb->GetServerVariable(pecb->ConnID,"URL",0,&dwLen);

Url = new char[dwLen+1];
if (Url == NULL)
{
DebgPrint("Alloc Url buffer error!\n");
return HSE_STATUS_ERROR;
}
pecb->GetServerVariable(pecb->ConnID,"URL",Url,&dwLen);
DebgPrint(Url);

//首次Client连接过来,记录Client的IP和PORT
//通过特定URL数据进行比对确认Client
if (!stricmp(Url,"/index.html") && !stricmp(pecb->lpszMethod,"POST"))
{
while (TRUE)
{
//获取传送的POST数据
if (pecb->cbTotalBytes > 0)
{
postDataBuffer = (char *)LocalAlloc(LPTR,pecb->cbTotalBytes);
if(postDataBuffer == NULL)
{
DebgPrint("LocalAlloc error!\n");
return HSE_STATUS_ERROR;
}
memcpy(postDataBuffer,pecb->lpbData,pecb->cbAvailable);
if (pecb->cbTotalBytes-pecb->cbAvailable > 0)
{
//读取剩余的数据
pecb->ReadClient(pecb->ConnID,(LPVOID)(postDataBuffer+pecb->cbAvailable),&dwPostSize);
DebgPrint(postDataBuffer);
}
}
Sleep(100);
DebgPrint(postDataBuffer);
ZeroMemory(postDataBuffer,pecb->cbTotalBytes);
}

LocalFree(postDataBuffer);
delete Url;
return HSE_STATUS_SUCCESS_AND_KEEP_CONN;
}

//如果不是客户端的数据,就正常返回请求的网页
else
{
ExecUrlInfo.dwExecUrlFlags = HSE_EXEC_URL_IGNORE_CURRENT_INTERCEPTOR;
retn = pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_IO_COMPLETION,HseIoCompletionProc, NULL, (LPDWORD)pEntity);
if (!retn)
{
DebgPrint("HSE_REQ_IO_COMPLETION support error!\n");
delete Url;
return HSE_STATUS_ERROR;
}
retn = pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_EXEC_URL, &ExecUrlInfo, NULL, NULL);
if (!retn)
{
DebgPrint("HSE_REQ_EXEC_URL support error!\n");
delete Url;
return HSE_STATUS_ERROR;
}

delete Url;
return HSE_STATUS_PENDING;
}

//处理结束 并保持连接
return HSE_STATUS_SUCCESS_AND_KEEP_CONN;
}


但只能接收到客户端第一次POST的数据,后面的就接收不到了,求解答!
...全文
519 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
一名程序员 2010-10-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dianyingwang123 的回复:]
学习了.................

IT项目交易/外包网 打扰了。。
[/Quote]关注之中!
jwybobo2007 2010-10-24
  • 打赏
  • 举报
回复
你是否在一条连接中,反复post数据?
按你的逻辑接受第一次post的指定长度数据后返回HSE_STATUS_SUCCESS_AND_KEEP_CONN
但是你没返回给客户端http应答,因此可能导致同一条连接中的后续数据不再会触发HttpExtensionProc

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧