TClientSocket连接服务器后工作一段时间后,莫名其妙的出现断开连接的现象?为什么?

flc 2006-04-26 10:31:14
我是采用TClientSocket 的ctNonBlocking的方式连接服务器的。在一天中大概出现20次断开服务器的情况。这是什么原因呢?
...全文
754 26 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
soloxiao 2006-04-28
  • 打赏
  • 举报
回复
我的经验是使用阻塞式放在线程中处理
while()
{
if(disconnect){tryconnect_server();disconnect=false;continue;}
action....
if(send or read data error)disconnect
}
rudolf_he 2006-04-27
  • 打赏
  • 举报
回复
是这样的我的程序在连接上服务器后,会发送一个长度为70个字符的数据请求,服务器在接到数据请求后,分析请求格式是否是正确;如果正确则发送数据。
程序在一天中至少要发送请求和数据接受500次;一天大概会出现20次中断现象。


照你这么说,你每次处理时间都很短,为什么不在需要的时候再来建立连接,处理完后断开,非要一直占着资源呢?
Atomictry 2006-04-27
  • 打赏
  • 举报
回复
你的程序是在广域网用的吧。我估计是由于你的socket大部分时间一直连着,而又不发包,而被中途的网关给喀嚓掉了。所以你应该让你的客户端程序每一分钟或半分钟发一个TTL包给服务端,服务端只需要把这个包原样发回给该客户端即可。

TTL包格式:随便搞一个,一个命令字都行。
flc 2006-04-27
  • 打赏
  • 举报
回复
客户说要发给我,还没有收到他的邮件!
客户在广州。。。。
Jim@luckeeinc.com 2006-04-27
  • 打赏
  • 举报
回复
后来你去看了日志了吗?
flc 2006-04-27
  • 打赏
  • 举报
回复
不是在广域网用的,是在一家汽车生产公司的局域网内。
在工作时大约每分钟都要进行数据传输,不可能接收后就断开网络。现在每天大约出现断开网络的现象有20次客户就担心影响生产。
flc 2006-04-26
  • 打赏
  • 举报
回复
在程序运行后TimerNet与TimerRead的Enabled都是ture。如果出现如下这种情况会不会断开连接呢?
当FSSocketRead在接收数据时,在TimerNet里用FSSocket->Active && FSSocket->Socket->Connected判断FSSocket的状态。这样会导致FSSocket的断开连接吗?
flc 2006-04-26
  • 打赏
  • 举报
回复
char ReceiveChar[255];
Jim@luckeeinc.com 2006-04-26
  • 打赏
  • 举报
回复
先出去吃饭~~
Jim@luckeeinc.com 2006-04-26
  • 打赏
  • 举报
回复
ReceiveChar是什么?你是二进制数据吗?
flc 2006-04-26
  • 打赏
  • 举报
回复
我发送的数据请求(70)和接收的数据(106)都是固定的格式的
这些都是我们和用户协商好的
rudolf_he 2006-04-26
  • 打赏
  • 举报
回复
看你这段代码:
int flag;
flag=FSSocket->Socket->ReceiveBuf(FSReceive,106);
if(flag==-1)
{
.....
}
if(ReceiveChar[10]=='1') //这里你怎么知道你总共接收到了多少数据?
//有没有考虑粘包的情况?
Jim@luckeeinc.com 2006-04-26
  • 打赏
  • 举报
回复
我对Socket了解不深 也刚刚接触 richard19831123@hotmail.com
网络方面的问问 “来电”
flc 2006-04-26
  • 打赏
  • 举报
回复
Ring_Pt(已是黄昏独自愁) 你好!您能把你的MSN告诉我好吗?谢谢您!在技术上有问题好与您联系。
flc 2006-04-26
  • 打赏
  • 举报
回复
是这样的我的程序在连接上服务器后,会发送一个长度为70个字符的数据请求,服务器在接到数据请求后,分析请求格式是否是正确;如果正确则发送数据。
程序在一天中至少要发送请求和数据接受500次;一天大概会出现20次中断现象。
Jim@luckeeinc.com 2006-04-26
  • 打赏
  • 举报
回复
我刚刚做掉一个RFID无线射频的监控 也是用Socket做的 长时间开着是没出现什么问题
不过如果说ClientSocket连接不上ServerSocket的时候 它会有连接请求在队列里 不会一下子就释放掉 这个要注意点 解决的方法是重连服务器的时间间隔超过默认值(一般30S应该可以了),其他到是没发现什么问题。
flc 2006-04-26
  • 打赏
  • 举报
回复
谢谢 Ring_Pt(已是黄昏独自愁)!
1)我和我们的客户联系一下,要求他把出现网络中断地日志发给我,在分析一下是何原因?
2)大家是不是在用TClientSocket组件的时候也会出现一些不知道原因地错误吗?
flc 2006-04-26
  • 打赏
  • 举报
回复
其实很简单的
TimerNet是检测是否断开的,如果断开自动连接。
TimerRead是发送数据请求的,当数据处理完成后自动发送数据请求。
FSSocketRead是接收数据的,主要错误是在这个过程产生的。
Jim@luckeeinc.com 2006-04-26
  • 打赏
  • 举报
回复
暂时还没看出来是哪里的问题 既然不是服务器断的 那只有看那个ErrorCode了 看代码没看出什么
flc 2006-04-26
  • 打赏
  • 举报
回复
现在程序已经在生产线使用了,不可能在调试。我就是麻烦各位高手看看我的代码是不是有不妥的地方。
加载更多回复(6)

13,870

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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