发布一个经过严格确认的BCB6 错误

常宁 2003-02-24 10:42:05
Borland C++ Builder 6 的Internet控件中TTcpClient控件存在严重内存操作错误,将影响所有使用该控件频繁连接的TCP客户端程序。具体外部现象:用TcpClient 频繁连接断开远程TcpServer服务器,会出现对象释放不全现象,集中反映在句炳数量增加,内存增加。当不写所有事件的时候特别明显。如果写某些事件的时候就不会有这样的问题,特别是在重写OnConnect事件的时候,有时候这个错误会消失。
...全文
105 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
rh 2003-03-18
  • 打赏
  • 举报
回复
啧啧,牛人拽得跟二五八万一样...小菜我闭嘴先出去了...bye
常宁 2003-03-17
  • 打赏
  • 举报
回复
yuanlianjun(头晕眼花)
没理了,也不用骂人啊,走了好,省得我再为你这样的人浪费口舌,呵呵
连异步模式都搞不懂的人,不配在这里指责别人
yuanlianjun 2003-03-17
  • 打赏
  • 举报
回复
: redpower(常宁) (

你几个字都写不正确,还发现人家的什么错误,真是笑话,就你这种对待问题的态度,迟早会被自己打败

本来不想与你一般见识,可惜今天心情不好,把自己形象弄得跟你等人一样了,真的很没意思

不与你这样人再谈任何技术问题,简直浪费时间,从此不再参与回复人: redpower(常宁) ( 的任何帖子

我早试验过,处理好错误代码,就不会出错,我那样写只是试验那几句话,真正写程序谁会写成我上面那个样子,redpower(常宁) 连这点都看不出来,弱智



yuanlianjun 2003-03-17
  • 打赏
  • 举报
回复
: redpower(常宁) (

跟你讨论问题简直就是跟以头猪在说话,拜拜
qiuafa 2003-03-17
  • 打赏
  • 举报
回复
Good good study, day day up!
常宁 2003-03-17
  • 打赏
  • 举报
回复
to yuanlianjun(头晕眼花)

回复人: yuanlianjun(头晕眼花) ( ) 信誉:100 2003-03-14 22:03:00 得分:0


你在一个时钟里快速调用
ClientSocket1->Socket->Close();
ClientSocket1->Close();(或ClientSocket1->Active = false;)
ClientSocket1->Open;

跟调用下面的比较
ClientSocket1->Close();(或ClientSocket1->Active = false;)
ClientSocket1->Open;

你这种方式很可笑,这样如果不出错误就见鬼了,当然我说的是在非阻塞模式用你得上面和下面方法都肯定出错。你的用法错误,编成思想也有问题。
而且我这个文章在讨论TTCPClient没有讨论TClientSocket,你在这里起什么哄?
不明白,你不看TClientsocket源代码就这在里发表什么高见。居然在这里这样说。


JYJUN 2003-03-15
  • 打赏
  • 举报
回复
听说要出BCB7,真的吗?
什么时候??
猛禽 2003-03-15
  • 打赏
  • 举报
回复
楼上的,如果你用非阻塞方式,这种情况肯定出错。
yuanlianjun 2003-03-14
  • 打赏
  • 举报
回复
你在一个时钟里快速调用
ClientSocket1->Socket->Close();
ClientSocket1->Close();(或ClientSocket1->Active = false;)
ClientSocket1->Open;
跟调用下面的比较
ClientSocket1->Close();(或ClientSocket1->Active = false;)
ClientSocket1->Open;
yuanlianjun 2003-03-14
  • 打赏
  • 举报
回复
呵呵,楼主别激动啊,技术人员重在交流,对了就听,错了提意见,你搞得像吵架似的,像个三岁小孩:)
事实是这样的:
我没测试过ServerSocket,因为做服务器程序时都是自己从底层封装SOCKET,自己开界面线程从而避免使用主窗口的消息循环。
但ClientSocket的ClientSocket->Close()方法是不会释放所有资源的,在重连时,要自己调用ClientSocket->Socket->Close();其实我是好心,因为我上次有个程序就是这个问题,后来弄了好久才知道原来是这样。CSDN是我们之间互相交流互相学习的地方,我本是好心才把这些经验说出来,因为大家都是苦命人。你自己想想,如果我没经历过这种情况,我敢乱说吗。(建议你以每秒100次重连,看看按你的方法会是什么情况)。

现在总结一下(灌水):
第一,推荐用ClientSocket->Active=false加ClientSocket->Socket->Close();关闭或者启动
第二,ClientSocket->Socket->Close();的用处是关闭套接字并释放相应资源
第三,ClientSocket->close()不释放所有的socket资源
第三,(唉,悟空,你就是粗心,是第四)不要多次释放socket,当然也不会多次释放,也就是说要用yuanlianjun(头晕眼花)的方法。
第四,(唉,悟空,你怎么还那么粗心呢,为师。。。。)ClientSocket是典型的异步IO的socket模型,如果不能清楚理解这个类的精妙,不要枉自猜疑。
^-^-^-^-^-^-^-^总结完毕
唉,可能是我错了也不一定,在这费了这么多口水,真不知道值还是不值
楼主,如果有得罪的地方,请见谅,不满的地方,请通通发到我的邮箱yuanlianjun@cctk.net,说不定我们会成为朋友
我来看看CB 2003-03-13
  • 打赏
  • 举报
回复
学习!
evence 2003-03-13
  • 打赏
  • 举报
回复
向搂主致敬,gz,
书生 2003-03-13
  • 打赏
  • 举报
回复
学习
chifengwatch 2003-03-13
  • 打赏
  • 举报
回复
gz
常宁 2003-03-13
  • 打赏
  • 举报
回复
刚刚说错了,PowerSocket也不能psocket->socket->close();psocket->close();看来yuanlianjun(头晕眼花) 和everandforever(Forever)到底说的是哪个socket控件我真的糊涂了。
常宁 2003-03-13
  • 打赏
  • 举报
回复
to yuanlianjun(头晕眼花)
to everandforever(Forever)
to mhappy(大头娃娃) ( )
你们三个看好了,我说的是TTcpClient,不是你们说的PowerSocket看清题在说好不好,
TTcpClient没有TcpClient->Socket->Close这个,只有PowerSocket才有这个东西,另外 yuanlianjun(头晕眼花)我看你真的老眼昏花了,我告诉你TClientsocket不会有这种问题,看看TClientsocket的源码你就知道了,他不需要你得Socket->Close()然后close();
常宁 2003-03-13
  • 打赏
  • 举报
回复
上面的帖子,是我在别的帖子中驳yuanlianjun(头晕眼花)的帖子,顺便贴到这里,因为内容相关。请大家参考
常宁 2003-03-13
  • 打赏
  • 举报
回复
to yuanlianjun(头晕眼花)
正确地用法应该是调用ServerSocket->Active=false;
从源码中可以看到,他会调用ServerSocket->Close(),而这个函数会在适当的时候调用ServerSocket->socket->Close();在这之前,他还会关闭所有的子连接,而不需要一个一个关闭
现在总结一下:
第一,推荐用ServerSocket->Active=false/true关闭或者启动TCP Server
第二,ServerSocket->Socket->Close();的用处是关闭Listen端口并释放相应资源
第三,ServerSocket->close()释放所有的socket资源,包括Listen以及子连接socket资源
第三,不要多次释放socket,经管这样不会产生错误,也就是说不要用yuanlianjun(头晕眼花)的方法。
第四,ServerSocket是典型的异步事件驱动的windows socket模型,而且封装完好,如果不能清楚理解这个类的精妙,不要枉自猜疑。
猛禽 2003-03-11
  • 打赏
  • 举报
回复
不行就用INDY嘛,它也是跨平台的
SharpKing515 2003-03-11
  • 打赏
  • 举报
回复
GZ
加载更多回复(9)

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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