大吐血,如能解决问题,再送200分!!!(100分)

  • 主题发起人 主题发起人 风之彼端
  • 开始时间 开始时间
是TClientSocket的错误处理没有做好, 我还在找错误之中!
 
WSAEWOULDBLOCK就是说你发出一个连接请求不能立刻执行,而TClientSocket没有处理
这个错误,所以就弹出错误窗口,
function CheckSocketResult(ResultCode: Integer; const Op: string): Integer;
begin
if ResultCode <> 0 then
begin
Result := WSAGetLastError;
// if Result <> WSAEWOULDBLOCK then //去掉这一行,你看看行不行!!!
if Assigned(SocketErrorProc) then
SocketErrorProc(Result)
else raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(Result), Result, Op]);
end else Result := 0;
end;
 
我在Win2K下也是运行了20多分钟都不出问题,但是SocketHandle的值却一直在增加,可能
是Win2K支持的最大句柄数远大于Win98或者其它原因,但这样的话最终还是要出问题的。
建议在ClientSocket的OnError事件中加入这行代码试试看:
closesocket(Socket.SocketHandle);
 
to 张无忌
不行,发不出去了
 
我哪个修改确实是错了,,,,,我想真正的错误我没有找到,
我可以提供一个思路,用winsock.dll的API函数写一个线程,
利用阻塞式,如果连接上了,就postmessage一个自定义消息给主
窗口。这样你就可以利用TClientSocket去连服务器,你看这个思
路如何了?
 
如果你再加点分给我可以帮你写好这个线程代码。
 
To: Sachow

只要看到SocketHandle一直增加,到最后是必错无疑的,到3万多就玩完。
SocketHandle一开始不断减少也是不对的,后来也会变为一直增加,直到3万多出错。

我试了其他的几个控件,像第三方的ICS(Internet Component Suite)控件组合,其中的TWSocket倒不会有TClientSocket的问题。它出错后不断重连时,SocketHandle一直在两个数值跳来跳去,不会像TClientSocket不断递增。
 
To 叮叮当当
看来我对TClientSocket的分析没有错,不知道你对我上面的想法有没有兴趣?
 
qq:19555655详谈
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
970
import
I
I
回复
0
查看
665
import
I
后退
顶部