请教,我在WSPRecv里面的lpBuffers里面得到的数据怎么不对?
代码:
int WSPAPI WSPRecv(
SOCKET s,
LPWSABUF lpBuffers,
DWORD dwBufferCount,
LPDWORD lpNumberOfBytesRecvd,
LPDWORD lpFlags,
LPWSAOVERLAPPED lpOverlapped,
LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
LPWSATHREADID lpThreadId,
LPINT lpErrno
)
{
HWND hWnd=FindWindow(NULL,_T("Show"));
if(IsWindow(hWnd))
{
SOCKADDR_IN addr;
int iAddrLen=sizeof(addr);
if(getpeername(s,(SOCKADDR*)&addr,&iAddrLen)!=SOCKET_ERROR)
{
if(htons(addr.sin_port)==1080)
{
COPYDATASTRUCT cds;
cds.dwData=0;
for(DWORD d=0;d<dwBufferCount;d++)
{
cds.cbData=lpBuffers[d].len;
cds.lpData=(void*)lpBuffers[d].buf;
if(IsWindow(hWnd))
SendMessage(hWnd,WM_COPYDATA,NULL,(LPARAM)&cds);
}
}
}
} return NextProcTable.lpWSPRecv(s, lpBuffers, dwBufferCount
, lpNumberOfBytesRecvd, lpFlags, lpOverlapped
, lpCompletionRoutine, lpThreadId, lpErrno);
}得到的数据举例如下:
接收长度=140
 1--3048dc00 08000000 29000000 b6d56500  5c676c6f 62616c5c 474c4849 53547e31 
 2--2e4f4358 0000a803 00000000 3048dc00  20000000 29000000 b6d56500 47323030 
 3--30312036 312e3138 332e3235 342e3435  3a333030 34203135 31372030 00000000 
 4--00000000 00000000 00000000 00000000  00000000 00000000 00000000 00000000 
 5--00000000 00000000 00000000 
通过RAW SOCKET得到得数据如下:(经过确认,这个是正确的数据)
接收数据-----长度:140
 1--07010080 20000000 29000000 6c736774  00f09c03 8ce76900 8ce76900 309b3504 
 2--03000500 03004200 00000000 08010080  54000000 01000000 05000500 47323030 
 3--30312036 312e3138 332e3235 342e3435  3a333030 34203134 37372030 00000000 
 4--00000000 00000000 00000000 00000000  00000000 00000000 00000000 00000000 
 5--00000000 00000000 00000000 这是怎么回事?另外,在WSPSend里面使用同样的代码处理lpBuffers,得到得数据却是正确的。