急问: TWinSocketStream的read函数!(100分)

  • 主题发起人 主题发起人 ludao
  • 开始时间 开始时间
L

ludao

Unregistered / Unconfirmed
GUEST, unregistred user!
Stream : TWinSocketStream;
buffer1: array[0 .. 1023] of Char;

Stream := TWinSocketStream.Create(ClientSocket, 30000);
FillChar(Buffer1, 1024, 0);
if Stream.WaitForData(20000) then //等待数据到来(1)
begin
if Stream.Read(Buffer1, 1024) = 0 then //读数据(2)
ClientSocket.Close
else
begin
//处理受到的数据(3)
Stream.Free;
ClientSocket.Close;
end;
end
else
ClientSocket.Close;//(4)
end;
except
HandleException;
end;
我在线程里使用类似上面的过程,动态创建ClientSocket.(我是客户端).
但是,实际测试过程中,当通讯压力比较大时,该过程经常很快执行(2)这条语句!
按说应该等待20s读不到数据才会执行(2),可我的为什么经常是(但并不是每次都是,大概30%是这样)一运行到(1)以后,马上就可是执行(2)!

哪位大虾能解释一下,原因在哪里?谢谢
 
上面的描述有点问题,我指的(2),是说执行了(2)以后,就执行下面的ClientSocket.close了!
 
关注:
同理问
CS=TClientSocket.Create(nil);
CS.open;
CS.Socket.sendText('Test');
CS.Close;
CS.Free

抛开On....过程,怎样才能顺序执行之

 
哪位知道问题出在哪里呀?
解决后另开贴加分!很急的!
 
唉,昨晚加班另做了个单线程多连接的程序,暂时用!
根据今天的监控情况看,出现了类似的情况:连接建立以后马上就被断开了,现在怀疑是对方的服务器端给限制了连接数,还不确定!

昨天的情况可能也是这个原因,waitfordata为true以后,马上被对方断开,故read=0!
 
Stream.Read(Buffer1, 1024) = 0不能退出,这个时候可能是可以向SOCKET里写入数据
应该这么判断退出条件。
try
stream.read()
except
//这个时候才能退出 ,这是我分析VCL代码得出的结论,
end;
 
对于stream.send()也要这么做,stream.read/write返回为0都不能退出,
 
无忌兄,你上面写的try...except中应该用Stream.ReadBuffer吧?因为我看delphi的帮助说Stream.Read()是不产生异常的.

现在我要求对方增大了允许的连接数,目前用单线程多连接还行!无忌的建议我有空再测试...呵呵!
 
//下面是TWinSocketStream.Read的代码, 你看产不产生异常???
if not ReadFile(FSocket.SocketHandle, Buffer, Count, DWORD(Result),
@Overlapped) and (GetLastError <> ERROR_IO_PENDING) then
begin
ErrorCode := GetLastError;
raise ESocketError.CreateResFmt(@sSocketIOError, [sSocketRead, ErrorCode,
SysErrorMessage(ErrorCode)]);
end;
 
无忌兄,你提供的try模块我今天测试了,没有什么改观,经常是执行了stream.read()后,马上就跳到了except模块!
这种现象只是在通信压力(数据交换)压力比较大的时候才有的!我怀疑是对方限制了连接数的问题,当我新连接刚刚建立时,对方发现连接数也满,就给断开了!但是,对方说现在也给开了15个连接,而我这里也限制了最多10个连接,仍然有这个问题,郁闷呀~~~

再解决不了,过两天就卷铺盖走人了!555~~~
 
这个问题,我基本已经确定了原因了!
的确跟对方限制了连接数有关!当我连接已满,这时如果因某个连接等待超时而被我断开后,而对方仍在做后台处理,我接着建立新的连接;
对方在我连接建立好以后,发现连接数超出即断开我的新连接,于是导致了上面的结果!
总之,主要原因是对方处理速度太慢,我也无奈!
 
现在对方已经提高响应速度和质量,我这里就没有问题了!
结贴!还是多谢无忌兄!
 

Similar threads

S
回复
0
查看
674
SUNSTONE的Delphi笔记
S
S
回复
0
查看
648
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
897
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部