Y
YinZu
Unregistered / Unconfirmed
GUEST, unregistred user!
我要用 ClientSocket实现这样的功能:
向服务器端发送串,每发送一个串服务器端都会返回一个结果,
现在我要循环向服务器端发送一万个串,每发送一个串,都要等服务器有返回结果才能
发送下一个串,请问如何实现,我选用ClientSocket控件, ClientType 为ctNonBlocking,我已经写了一些代码,可结果总是与预期的不一致,比如我发发送了
10个串,返回只有5个(比如只返回了第2,4,6,8,10个串的结果),
但是如果单步执行,结果就正确,我知道,应该是因为结果还没有返回就又
发送了下一个串,如何解决这种问题,
每发送一个串,等结果返回了才发送下一个串,如果返回超时就报错,请各位指点,最好有相关的代码供参考就最好了,
以下是发送串处的大体算法:有不对的地方,请指点
// 循环发送串
while not Eof(AreaTxtFile) do
begin
//等待,直到有返回值才发送下一条记录
Iflag := 0 ;
repeat
Iflag := Iflag + 1;
if Iflag > 1000000 then
begin
showmessage('time out');
btimeout := True;
break;
end;
until bIsReturn;
if btimeout then
exit;
.
.
.
. //此处为程序中相关的处理
.
.
//发送串前,使返回标识为False
bIsReturn := False;
//发送串
ClientSocket1.Socket.SendText(str);
end;
说明 bIsReturn 为全局变量,标识是否已有值返回,
以下是接收到串的大体算法:
在OnRead事件里,
ReturnValue := ClientSocket1.Socket.ReceiveText;
if ReturnValue <> '0' then
begin
//处理。。。
end;
//接收到值后,使返回标识为True
bIsReturn := True;
向服务器端发送串,每发送一个串服务器端都会返回一个结果,
现在我要循环向服务器端发送一万个串,每发送一个串,都要等服务器有返回结果才能
发送下一个串,请问如何实现,我选用ClientSocket控件, ClientType 为ctNonBlocking,我已经写了一些代码,可结果总是与预期的不一致,比如我发发送了
10个串,返回只有5个(比如只返回了第2,4,6,8,10个串的结果),
但是如果单步执行,结果就正确,我知道,应该是因为结果还没有返回就又
发送了下一个串,如何解决这种问题,
每发送一个串,等结果返回了才发送下一个串,如果返回超时就报错,请各位指点,最好有相关的代码供参考就最好了,
以下是发送串处的大体算法:有不对的地方,请指点
// 循环发送串
while not Eof(AreaTxtFile) do
begin
//等待,直到有返回值才发送下一条记录
Iflag := 0 ;
repeat
Iflag := Iflag + 1;
if Iflag > 1000000 then
begin
showmessage('time out');
btimeout := True;
break;
end;
until bIsReturn;
if btimeout then
exit;
.
.
.
. //此处为程序中相关的处理
.
.
//发送串前,使返回标识为False
bIsReturn := False;
//发送串
ClientSocket1.Socket.SendText(str);
end;
说明 bIsReturn 为全局变量,标识是否已有值返回,
以下是接收到串的大体算法:
在OnRead事件里,
ReturnValue := ClientSocket1.Socket.ReceiveText;
if ReturnValue <> '0' then
begin
//处理。。。
end;
//接收到值后,使返回标识为True
bIsReturn := True;