IDTcpServer丢数据?请高手指教&……
啥都得学呀 2009-08-28 02:15:45 我刚刚做了个测试
用INDY里的TCPSERVER和 TCPCLIENT
执行的功能是,CLINET循环500次连接,每次连接随便发送一个简单的字符串。SERVER端,只负责记录下来这些数据,记录成功,返回1,记录失败,返回2。
当我开一个CLIENT的时候,每次都完全都能记录下来500条数据。而且完全都成功的。即使循环100次,也没问题。
但是,当我用2个CLIENT,差不多一起点循环按钮的时候,问题就出现了。如果2个客户端分别循环500次的话,差不多丢了100以上的数据,更可恨的事,返回的结果居然都是成功。当然,极少的情况下也会出现失败。但少的可怜……
我想知道,怎么会丢数据了呢??
附带我接受的时候的代码 IdTCPServerExecute(AContext: TIdContext);ReceText := copy(s, 5, length(s));
TIdSync.SynchronizeMethod(ExecuteCommand);
if OpResult then AContext.Connection.Socket.Write('1' + #13#10) OpResult 是操作结果
else AContext.Connection.Socket.Write('2' + #13#10);
{这里是同步方法}
procedure TFormIndex.ExecuteCommand;
var MainData: string;
begin
{执行命令}
OpResult := ValiKey(ReceText);{这里判断的是字符串是否合法}
if not OpResult then exit;
MainData := copy(ReceText, pos('|', ReceText) + 1, length(ReceText));
OpResult := REWRITETXT(ExtractFilePath(Paramstr(0)) + 'SysLog.txt', MainData);{这里执行把数据写入TXT文本}
end;
{这里是写入TXT文本}
function REWRITETXT(FILEPATH: string; VALUES: string): BOOLEAN;
var
FileHandle: integer;
txtFile: TextFile;
begin
try
if not FileExists(FILEPATH) then
begin
FileHandle := FileCreate(FILEPATH);
FileClose(FileHandle);
end;
AssignFile(txtFile, FILEPATH);
Append(txtFile);
Writeln(txtFile, VALUES);
CloseFile(txtFile);
RESULT := TRUE;
except
RESULT := FALSE;
end;
end;