请朋友们帮检查一下下面的代码有漏洞吗?我刚接手一个程序,对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;
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;
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;
强烈推荐楼主用 Indy.