SocketConnection连接服务器的超难问题。^_^

311_fox 2005-03-11 11:39:22
我的代码是这样的:
procedure TForm1.Button1Click(Sender: TObject);
var
a:TSocketConnection;
begin
try
a:=TSocketConnection.create(nil);
try
a.Host := '192.168.1.212';
a.Port := 2225;
a.ServerName :='test.TRMDB';
a.Connected := true;
Finally
Freeandnil(a);
End;
Except
on E:exception do
showmessage(e.Message);
End;
end;
如果服务器不存在或服务器没有开,这时连接服务器,程序就没有反应了,也捕获不到异常,不知道为何?请大虾帮忙。
...全文
165 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
311_fox 2005-03-13
  • 打赏
  • 举报
回复
谢谢各位。
BlueTrees 2005-03-12
  • 打赏
  • 举报
回复
楼上正解,会检测到不能连接,就是时间比较长,看上去象死机一样,是你程序处理得不好,这种可能耗时的操作,应该放到一个后台线程里面去做,这样前台就不会卡了,前台可以显示正在连接中。

这种问题会很普遍,比如一个耗时的数据库操作,也就是提交数据了,你最好把这样的操作都放到后台线程去做,这样写出来的程序才看起来比较专业一点,要不然就象个学生作品。
slwz2000 2005-03-12
  • 打赏
  • 举报
回复
单步调试啊,应该能看出在运行哪里。
gzmhero 2005-03-11
  • 打赏
  • 举报
回复
except 能够捕捉到的。如果服务器地址不存在,要很长时间才能得到异常。要等一会。程序还没死。
pclion 2005-03-11
  • 打赏
  • 举报
回复
全部被finally捕捉了,哈哈
BES 2005-03-11
  • 打赏
  • 举报
回复
a:=TSocketConnection.create(nil);
try
a.Host := '192.168.1.212';
a.Port := 2225;
a.ServerName :='test.TRMDB';
a.Connected := true;
Finally
Freeandnil(a);
End;

你刚创建了,又在Finally中将其释放了,怎么用??

另外将你的a.ServerName :='test.TRMDB';所指向中间层的TConnection控件的TimeOut设小一些 如5
jinjazz 2005-03-11
  • 打赏
  • 举报
回复
连不上就只能等待超时
gzmhero 2005-03-11
  • 打赏
  • 举报
回复
能捕捉得到,只不过延时比较长,楼主耐心多等一会就行了。30s以上。

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧