写了一个SPI程序,准备修改TCP数据包,也就是HTTP协议中的某些字段,当把某个字段删掉也就是消息包长度减小时,IE的表现都很正常,但是在消息包中增加某些数据后,此时消息包的长度增大了,此时进行发送,IE就会崩溃,下面是我修改TCP消息包的源代码,请各位大虾指点一下,多谢!
int WSPAPI WSPSend(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
{
string strContent;
WriteLog("lpBuffers->len = %d",lpBuffers->len);
if ((NULL == lpBuffers->buf) || (lpBuffers->len < 0))
{
return 0;
}
strContent.assign(lpBuffers->buf,lpBuffers->len);
string strHost;
bool bResult = GetHost(strContent,strHost);
if ((bResult) && ("xxxx" == strHost))
{
if (ChangeContent(strContent))
{
char *pchTemp = new char[3000];
memset(pchTemp,0,3000);
memcpy(pchTemp,strContent.c_str(),strContent.length());
int iLenChanged = strContent.length();
lpBuffers->len = iLenChanged;
lpBuffers->buf = pchTemp;
}
} return nextproctable.lpWSPSend(s,lpBuffers,dwBufferCount,
lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionRoutine,
lpThreadId,lpErrno);
}
int WSPAPI WSPSend(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesSent,
DWORD dwFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
{
string strContent;
WriteLog("lpBuffers->len = %d",lpBuffers->len);
if ((NULL == lpBuffers->buf) || (lpBuffers->len < 0))
{
return 0;
}
strContent.assign(lpBuffers->buf,lpBuffers->len);
string strHost;
bool bResult = GetHost(strContent,strHost);
if ((bResult) && ("xxxx" == strHost))
{
if (ChangeContent(strContent))
{
char *pchTemp = new char[3000];
memset(pchTemp,0,3000);
memcpy(pchTemp,strContent.c_str(),strContent.length());
int iLenChanged = strContent.length();
lpBuffers->len = iLenChanged;
lpBuffers->buf = pchTemp;
}
} return nextproctable.lpWSPSend(s,lpBuffers,dwBufferCount,
lpNumberOfBytesSent,dwFlags,lpOverlapped,lpCompletionRoutine,
lpThreadId,lpErrno);
}
建议你换个函数,将int WSPAPI WSPSend()替换下试试。