socket控件实现的非阻塞编程,对receivetext事件的相关疑问....

talkingmute 2005-08-12 05:27:03
本人最近通过clientsocket和serversocket实现了一个c/s结构的非阻塞网络程序,客户端和服务端是通过相关信令来进行通信的,调用的方法是sendtext和receivetext。
比如服务端返回"110+用户信息"时,代表返回当前客户的用户信息,返回"111+在线列表"时,代表返回所有连接上服务端的客户列表。然后客户端通过receivetext方法来读取相应字符串,如是"110...",则把它显示在memo1,如是"111...",则把它显示在memo2。
可是问题出来了,服务端先是通过sendtext把"110..."发送给客户,然后把"111..."发送给客户,因为"110..."字符串比较长,"111..."字符串比较短,导致客户端通过receivetext方法读字符串时读到了"111...110..."字符串,而使memo1中没信息,memo2中出现了"111...110..."信息,我想知道有没什么方法对这两种通信标志进行分离?
请问下receivetext事件的具体流程是什么?就是当它接连收到多个字符长度差异比较大的数据时,是不是先读取出的是短的字符串,长的字符串在后面跟着被读出?
...全文
186 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdstarnet 2005-08-21
  • 打赏
  • 举报
回复
星品网(http://www.cdstar.net)1000多款最新软件游戏和影视光盘促销,每张原装光盘4元,24H送货上门,进来看看!
huabihan 2005-08-14
  • 打赏
  • 举报
回复
设置结束符号吧,这样就不会出现那个问题了,socket中receiveBuf和ReceiveStream一样的。
talkingmute 2005-08-14
  • 打赏
  • 举报
回复
谢谢这位朋友,那可否具体说下,是在哪里加入多线程呢?是在OnRead事件中吗?那样的话,如果用ReceiveText感觉还是会出现那种情况的,不知您说的多线程该是怎么实现的?
还有就是您说的Stream,在Socket中没有ReceiveStream方法,有ReceiveBuf和ReceiveText方法,用ReceiveBuf和ReceiveText两者有什么不同吗?
希望您能继续解答下!
也恳切听到其他人的解答!
编译失败 2005-08-12
  • 打赏
  • 举报
回复
用阻塞模式就没有这个问题,因为非阻塞模式不会等你处理完一条数据后再发下一条,如果非用非阻塞模式,你必须用多线程来处理。而且你用receivetext的方法不太科学,可用Stream;

1,316

社区成员

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

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