帮助我判断这段ClientSocket程序有没有问题--谢谢

su9989 2005-10-29 08:44:09
1、主函数:MyClientSocket->Open();触发MyClientSocket的Write事件,非阻塞方式

2、Write事件:MyClientSocket->Sockets->SendBuffer();

3、Read事件:
(1)MyClientSocket->Sockets->ReceiveBuffer();

(2)判断返回的内容,如果有问题,调用错误处理函数{ ProcessError();return;}

(3)保存返回的结果

(4)由于总共要和ServerSocket连续交互9989次,所以在此次数累加1,并判断一下次数,如果尚未完成,转到(5),如果已经达到9989次,转到(6)

(5)MyClientSocket->Active=false;
MyClientSocket->Active=true;继续触发MyClientSocket的Write事件,发下一条数据

(6)调用别的函数对数据做其他处理


以上处理流程有问题吗?
运行过程中出现的问题:
当执行到3(2){ ProcessError();return;} 时,表示ServerSocket运算出现了错误,要退出ClientSocket的循环运行流程,但是程序执行完ProcessError()后,并没有return,还要继续执行后面的代码,这样数据会出错,怎么解决这个问题,让程序完全退出ClientSocket的循环运行流程?

针对这种要和ServerSocket连续交互多次的情况,有何良策?
...全文
255 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
asdfg014 2005-11-04
  • 打赏
  • 举报
回复
傻小子~真强
dragonhux 2005-10-30
  • 打赏
  • 举报
回复
不知道你用的开发版本,如果是使用TClientSocket控件,说一点,TClientSocket只在BCB6.0以下版本存在,重delphi7.0开始就将这个控件内置为隐含了,不找到为什么,我想可能还是有BUG等问题吧。

其次,你的处理,我提点建议:

主程序:
MyClientSocket->Open();
MyClientSocket->Sockets->SendBuffer(); //不要使用write触发,而是直接调用

-----至于3(2)的问题,我怀疑是因为接收到新的数据而触发的,TClientSocket本身是多线程的,你改为{ MyClientSocket->Active=false; ProcessError();return;} 试试,先关闭socket在处理错误,或者清空接收的缓冲区

pp616 2005-10-30
  • 打赏
  • 举报
回复
ReceiveBuffer后直接SendBuffer
不要
MyClientSocket->Active=false;
MyClientSocket->Active=true;
好好的连接为什么要断开重连????????

TClientSocket默认是WSAAsyncSelect模式。怎么会是多线程的??

1,317

社区成员

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

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