我现在的问题是如上,需更明确一点的是,用的非阻塞式的。
但是我不知道怎么进行更高的判断是否连接上了。
现在我已经用以下方法判断过:1)TClientSocket.Active 判断,但是当我是连接到了TServerSocket 时,TClientSocket.Active为什 么是FALSE
2)TClientSocket.Scoket.Connected 判断,如果连接上了,也是FALSE ,
这是怎么原因?如何判断?请高手指点一下。
但是我不知道怎么进行更高的判断是否连接上了。
现在我已经用以下方法判断过:1)TClientSocket.Active 判断,但是当我是连接到了TServerSocket 时,TClientSocket.Active为什 么是FALSE
2)TClientSocket.Scoket.Connected 判断,如果连接上了,也是FALSE ,
这是怎么原因?如何判断?请高手指点一下。
解决方案 »
- 帮忙解释一句代码。对clientdataset的data属性和datarequest方法不理解
- 异常处理之初学者
- 通过MOXA连接16个串口设备,我该用16个spcomm控件还是用一个呢?
- 问个图象处理的问题,从数据库中取数据显示在BMP图片上
- 请高手解答,ShellTreeView.Parent的问题,Delphi Bug??
- adoquery 中 如何实现 select 返回值的问题
- 怎么知道.dll里面有哪些函数可以调用
- fastreport报表导出为csv格式的时候,经常会合并相邻的字段,何故?
- 在线求帮助!(急)
- 数据导出问题!紧急
- 如何将XML文件导入到paradox数据库(使用BDE)。
- 如何更改列的名字
在OnConnect事件发生的时候,怎么进行说明呀???
下面是代码:我用的标记是m_Connected :Boolean;
在发送数据的地方连续等待该标记20秒
//自定义TClientSocket的OnConnect事件处理过程
procedure TScanCmdThread.ClientSocketConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
m_Connected := True;
end;
在数据发送的地方是这个样子:
try
try
//创建用户套接字
ClientSocket := TClientSocket.Create(nil);
//创建跟Agent的通信连接
ClientSocket.ClientType := ctNonBlocking;
ClientSocket.Address := sAgentIP;
ClientSocket.Port := nAgentPort;
//ClientSocket的Connect,Error,Disconnect事件处理过程
ClientSocket.OnConnect := ClientSocketConnect;
ClientSocket.OnError := ClientSocketError;
ClientSocket.OnDisconnect := ClientSocketDisConnect; //连接Agent
ClientSocket.Open; //等待20S,如果没有连接成功,则退出
for i := 0 to 99 do
begin
if m_Connected then
begin
nParamsLen := 0;
pAgentParames := nil;
//发送更新规则命令
if SendCommand(ClientSocket, integer(AGTacticdeploy), pAgentParames, nParamsLen) = -1 then
begin
AddLog('发送更新规则命令失败');
ErrorHandle(nil, 'TScanCmdThread.DoUpdateAgentParam', '发送更新规则命令失败');
end
else
begin
m_Connected := False;
break;
end;
end;
sleep(200);
end;
except
Exit;
end;
finally
ClientSocket.Close;
ClientSocket.Free;
end;
为什么非要面向过程的思想了?
法二:开个线程处理此事,因为你这样睡200,实际上就是无作用地等待200,OnConnect不会在此时中触发。当时我也遇到这个问题,由于时间紧没有仔细研究.
还有,你的目的是什么,是有数据发送才连接SERVER吗??果然不是的话可以做一些预处理,让它先连接好。
消息队列是单线程的,所以需要用application.processmessages()函数让消息
队列处理消息,至于超时可以用gettickcount函数判断,