请朋友们帮检查一下下面的代码有漏洞吗?我刚接手一个程序,对socket不熟,接收那里是不是有问题?procedure TFormMain.TcpServerAccept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  c: char;
  sRev: string;
  str: string;
  XMLDoc: IXMLDocument;
begin
  // 接收
  sRev := '';
  while clientsocket.WaitForData(1000) do
  begin
    clientsocket.ReceiveBuf(c, 1);
    sRev := sRev + c;
  end;  // 客户请求应该是XML文档
  XMLDoc := CreateXMLDoc;
  XMLDoc.LoadXML(sRev);
  if (XMLDoc.DocumentElement <> nil) then
  begin
    str := QueryServer(XMLDoc.XML, ConfigData.iTimeOut);
    if str <> '' then
      Sleep(strtoint(ConfigData.sSleepTime));
      ClientSocket.SendBuf(pchar(str)^, length(str), 0);
  end;end;

解决方案 »

  1.   

    看不太懂,如果你说遇到了什么错误,或许大家可以帮忙看看
    XMLDoc 记得要释放。
      

  2.   

    回楼上,XMLDoc是一个接口
    另外:
    我的程序中有这样一段代码,把它们注释掉,模拟一下返回值,内存就不会涨,否则,内存就会稳定的增长,好奇怪,是webbrowser的问题吗?
        // Post请求到服务器
        Headers := 'Content-Type: application/x-www-form-urlencoded';
        WebBrowser.Navigate2(url,Flag,EmptyParam,PostData,Headers);
        //WebBrowser.Navigate(ConfigData.sUrl,Flag,EmptyParam,PostData,Headers);    // 等待服务器返回信息
        TickCount := GetTickCount;
        while WebBrowser.ReadyState<>READYSTATE_COMPLETE do
        begin
          Application.ProcessMessages;
          Sleep(1);      // 判断是否超时
          if (iTimeOut>0) then
          begin
            i := (GetTickCount - TickCount) div 1000;
            if (i>=iTimeOut) then
            begin
              FOK := False;
              break;
            end;
          end;
        end;
      

  3.   

    做 Socket 是不是用 Indy  更容易一些?
    强烈推荐楼主用 Indy.