关于IDTCPClient的问题,当Readln后,报错,然后不自动断开连接?,怎么回事

forverlove 2006-10-07 01:16:46
with frmClient do
begin
while not Terminated do       //在子线程中执行,所以加此判断
begin
if TCPClient.Connected = true then
begin
cmd := 'COMMANDCLOSEQQ';
try
strData := TCPClient.ReadLn;
Sleep(300);
except
on e:exception do
begin
//ShowMessage(e.Message);
if TCPClient.Connected = false then
TCPClient.Connect;
end;
end;
end;
当执行到strData := TCPClient.ReadLn这句时报错,调试发现连接已断开,且线程Terminate
请求达人帮助
...全文
369 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
forverlove 2006-11-15
  • 打赏
  • 举报
回复
很久没人给建议了。就结帖吧
do2008 2006-10-14
  • 打赏
  • 举报
回复
一般来说 TCPClient.ReadLn报错,即读取数据失败,那最大的可能就是TCP连接已经判断了

建议你这样调试,

1.在开发环境中运行你的服务器端,然后在接收IDTCPClient连接,并发送数据到IDTCPClient的这些代码的地方下断点,

2.运行客户端,向服务器连接,并接收服务器返回的数据

按上面这样的测试后,看是什么样的情况
forverlove 2006-10-14
  • 打赏
  • 举报
回复
先回答楼上的:
  我加if TCPClient.Connected = false then
TCPClient.Connect;
这句就是因为在执行readln断开了,才后来加上的。

TO:do2008
   不太可能是Server端断开了,我上面一句有判断是否连接啊。而且就算刚连接上去就发送的话也不行。
可能问题我没想清楚,请说的详细点。。
dabaicai 2006-10-08
  • 打赏
  • 举报
回复
那是因为你异常处理里面加了
if TCPClient.Connected = false then
TCPClient.Connect;
又把它连接上了
do2008 2006-10-07
  • 打赏
  • 举报
回复
TCPClient.ReadLn读取数据不成功,可能是server那一端,已经断开了TCP连接了,

所以,你应该检查一下server那一端

1,593

社区成员

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

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