TC官方合作论坛

 找回密码
 立即注册
查看: 2634|回复: 10

TCP通信反面的bug,非常希望改进,很影响脚本稳定性

[复制链接]
发表于 2013-12-29 17:23:46 | 显示全部楼层 |阅读模式
本帖最后由 YxNirvana 于 2013-12-29 18:33 编辑

脚本例子:
服务端客户端两脚本.
服务端:负责帐号分配和数据处理,相当于一个总控.
客户端:从服务器接收任务并且去执行.
问题出在TCP通信方面
如下例子:
TC用的是winsock api,用一个循环来接收数据并输出错误信息
服务端:(连接等方面省略)
  1. 循环(真)
  2.         网络.接收(客户端句柄,数据内容)
  3.         调试输出(网络.获取错误信息())
  4.         数据处理(数据内容)
  5. 循环结束
复制代码

客户端:同上
问题来了:两个问题,性质一样.
问题1前提:客户端连接上服务器后,不管因为什么原因客户端自己强制断开了.
(脚本出错啊,界面销毁出错断开信息没发错出去啊,情况还是很多的)
这时候就出现两种情况:
情况1:客户端没有给服务端发送过信息,这时候服务端能的到错误信息.
情况2:客户端服务端发送过信息,这时候服务端就不能的到错误信息.
并且更严重的是,服务端会不断接收客户端上次发送的信息,直到服务器直接卡死.
问题2前提:服务端连接上服务器后,不管因为什么原因服务端自己强制断开了.
情况同问题1,但是造成的结果比较严重,客户端全部卡死.


再说说
网络.获取错误信息()
得到错误信息只是一个错误号,如果出现在客户端还好,如果出现在服务端根本就不知道哪个客户端出问题了.
这样就造成了一个情况,这个服务网中,任意个体出现问题,则要全网重启.
客户端出现问题,则服务端卡死,强制结束后,所有的客户端也会跟着卡死.
如果客户端少还好说,要是很多的话,那么出现错误的情况太多了.
万一的情况总会出现,但是连纠错都不能这情何以堪啊.
建议TC工具箱中增加类似于VB的winsock的控件.
或者将
网络.获取错误信息()
做的更好些.


========测试方法======
1.打开服务端,客户端
2.打开服务端连接(勾选),然后勾选客户端连接
3.直接关闭客户端脚本(为了模拟出问题强制关闭)
4.看服务端的输出吧,问题大大的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

发表于 2013-12-29 17:27:09 | 显示全部楼层
这玩意我做过功能比你说的还强,也曾经跟你一样蛋疼,后来发现思路错了,自己颠覆了自己之后,可以成功
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-29 17:32:11 | 显示全部楼层
超自然 发表于 2013-12-29 17:27
这玩意我做过功能比你说的还强,也曾经跟你一样蛋疼,后来发现思路错了,自己颠覆了自己之后,可以成功 ...

= =我想请教一下你是怎么解决的,实在不想用udp,如果udp的话根本就不用考虑,但是太不稳定了,用tcp我实在想不到怎么解决,不吝赐教哦.
回复 支持 反对

使用道具 举报

发表于 2013-12-29 17:39:06 | 显示全部楼层
本帖最后由 超自然 于 2013-12-29 17:46 编辑

不要把端口固定,客户端所使用的端口,每次由服务端和客户端在一定范围内自协商决定
你这样考虑,开一个线程在服务端,作为接待,专门接待客户端的连接请求,客户端通过固定一个端口发来一个连接请求,
接待线程收到请求之后,负责给每个情况发放一对未使用端口并且通过固定端口告诉客户端本次通讯正式使用的端口,然后接待线程开出一个测试线程
测试线程使用接待线程分配的新端口等待客户端发来测试连接,客户端接到接待线程的分配之后,通过新端口与服务端进行一次交互测试,
如果测试通过,那么双方正式确立使用该组端口

因为是动态协商的,服务端每成功分配一组端口,就记录起来,重新运行出的客户端再次接入就不会死端口了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-29 17:52:28 | 显示全部楼层
超自然 发表于 2013-12-29 17:39
不要把端口固定,客户端所使用的端口,每次由服务端和客户端在一定范围内自协商决定
你这样考虑,开一个线程在 ...

你说的让我想起用vb的winsock了,那玩意总占用端口不释放,我就是你说的这种方法.
但是tc的问题不在这,主要是,如果非正常关闭,那个套接字的自动关闭问题,在服务端根本就检测不到到底是哪个客户端出问题了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-29 17:57:12 | 显示全部楼层
超自然 发表于 2013-12-29 17:39
不要把端口固定,客户端所使用的端口,每次由服务端和客户端在一定范围内自协商决定
你这样考虑,开一个线程在 ...

不像是winsock,一个服务+一个控件组,哪个控件连接出问题一目了然.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-29 18:00:50 | 显示全部楼层
超自然 发表于 2013-12-29 17:39
不要把端口固定,客户端所使用的端口,每次由服务端和客户端在一定范围内自协商决定
你这样考虑,开一个线程在 ...

我试过专门用vb写中控,用tc连接,但是很不理想,传递的信息总出乱码
回复 支持 反对

使用道具 举报

发表于 2013-12-29 18:03:12 | 显示全部楼层

它这tcp确实有点蛋疼,反正我是八路党,相信不等不靠才是硬道理,没辙了我就自己打造哪套协商方法,麻烦点,但是不用等官方猴年马月去更新这事,
脚本得以写完,任务得以完成
哥们可以继续反映问题,等候处理,也可以学着朝八路的方向靠一靠,解决自己的问题先
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-29 18:10:13 | 显示全部楼层
超自然 发表于 2013-12-29 18:03
它这tcp确实有点蛋疼,反正我是八路党,相信不等不靠才是硬道理,没辙了我就自己打造哪套协商方法,麻烦点 ...

= =没辙先用udp,我这个不是死端口的问题了,这个蛋疼啊
回复 支持 反对

使用道具 举报

发表于 2013-12-29 20:36:23 | 显示全部楼层
用tc做健壮的前后端恐怕不太现实
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-9-29 09:47 , Processed in 0.042058 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表