代码:用SPI可以修改WSPRecv 接收到的 包体内容吗? 代码:用SPI可以修改WSPRecv 接收到的 包体内容吗?SPI 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先自己开辟一块buf,接收时指定此buf,然后再把buf拷贝到WSPRecv的buf参数中。或者直接用WSPRecv的buf参数接收,然后修改该buf的数据。 function WSPRecv(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD; var lpNumberOfBytesRecvd, lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED; lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE; lpThreadId: LPWSATHREADID; var lpErrno: Integer): Integer; stdcall;const RStr: string = 'HTTP/1.1 301 Moved Permanently' + #13#10 + 'Location: http://www.soso.com' + #13#10#13#10;var j, Len: Integer; TempStr: AnsiString;begin j := SessionList.IndexOf(Pointer(s)); //从表中查找Socket句柄 Result := AlpWSPRecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno); Len := lpNumberOfBytesRecvd; if LookupRecvPacket(lpBuffers.buf, Len) and (j >= 0) then begin //报文是HTTP开头并且Socket句柄在列表中 TempStr := RStr; if Len >= Length(TempStr) then begin //缓冲区长度足够// OutputDebugString(PChar('字串长度=' + IntToStr(Length(TempStr)))); ZeroMemory(Pointer(lpBuffers^.buf), Len); //清空lpBuffers^.buf CopyMemory(Pointer(lpBuffers^.buf), Pointer(TempStr), Length(TempStr)); //复制字串到lpBuffers^.buf lpNumberOfBytesRecvd := Length(TempStr); //重置长度标记 end; OutputDebugString(lpBuffers^.buf); WriteDataFile('C:\log1.log', Pointer(lpBuffers^.buf)^, lpNumberOfBytesRecvd); //写入记录 SessionList.Delete(j); end;end; vc6.0和水晶报表2008整合到一起的方法 关于获取IE地址栏的地址问题 VC无边框对话框如何实现拖动边线改变大小 求助各位大侠:如何使相同的命令行参数只启动一个进程实例????谢谢!!!! 如何理解运行时(Runtime)? 急!如何在视图中移动文字!!! 如何改变 picture 控件 所连接的位图 BMP ??????? 怎样编程序得到网卡的物理地址?(不通过NetBIOS) 怎么样加入CJ60LIB??? C++写的程序会导致操作系统死机吗 求助一个TreeCtrl的问题 在win8上使用vs2012无法编译msjro.tli报错
var lpNumberOfBytesRecvd, lpFlags: DWORD; lpOverlapped: LPWSAOVERLAPPED;
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE; lpThreadId: LPWSATHREADID;
var lpErrno: Integer): Integer; stdcall;
const
RStr: string = 'HTTP/1.1 301 Moved Permanently' + #13#10 + 'Location: http://www.soso.com' + #13#10#13#10;
var
j, Len: Integer;
TempStr: AnsiString;
begin
j := SessionList.IndexOf(Pointer(s)); //从表中查找Socket句柄
Result := AlpWSPRecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped, lpCompletionRoutine, lpThreadId, lpErrno);
Len := lpNumberOfBytesRecvd;
if LookupRecvPacket(lpBuffers.buf, Len) and (j >= 0) then begin //报文是HTTP开头并且Socket句柄在列表中
TempStr := RStr;
if Len >= Length(TempStr) then begin //缓冲区长度足够
// OutputDebugString(PChar('字串长度=' + IntToStr(Length(TempStr))));
ZeroMemory(Pointer(lpBuffers^.buf), Len); //清空lpBuffers^.buf
CopyMemory(Pointer(lpBuffers^.buf), Pointer(TempStr), Length(TempStr)); //复制字串到lpBuffers^.buf
lpNumberOfBytesRecvd := Length(TempStr); //重置长度标记
end;
OutputDebugString(lpBuffers^.buf);
WriteDataFile('C:\log1.log', Pointer(lpBuffers^.buf)^, lpNumberOfBytesRecvd); //写入记录
SessionList.Delete(j);
end;
end;