在连续sendtext的时候,Sleep的时间怎么计算??

shark_dim 2003-05-08 10:47:34
如题!比如
for(;;)
{
Socket->SendText("1231231312");
Sleep(??);
}
我在接收时,想分个接收,需要Sleep,这样。Sleep怎么接收呀?
...全文
55 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
猛禽 2003-05-12
  • 打赏
  • 举报
回复
还有一点很关键的是,JSP兄的做法只能用阻塞方式,而且在阻塞方式也不推荐用SendBuf/SendText,应该用TWinSocketStream。
在非阻塞方式下要在SOCKET的读写事件里进行SendBuf和SendText,Recieve时同要也要在事件里
jishiping 2003-05-12
  • 打赏
  • 举报
回复
楼主的思路不对。应该这样,在每次发送数据前,先发送数据包的长度,然后再发送数据。
接收时,也是先读取数据包的长度,然后再读取数据。这样就解决问题了。
for(;;) //发送数据
{
short Len = xxx;
Socket->SendBuf(&Len, 2);
Socket->SendText("1231231312");
}

for(;;) //接收数据
{
short Len; char* buf;
Socket->ReceiveBuf(&Len, 2);
if (Len > 0) {
buf = new char[Len+1];
Socket->ReceiveBuf(buf, Len);
buf[Len] = '\0';
//处理收到的数据......
delete[] buf;
}
}

这儿我用的是short来存放数据的长度,你可以根据实际情况,采用其它数据类型(如BYTE
或者DWORD)来存放数据长度。
猛禽 2003-05-09
  • 打赏
  • 举报
回复
楼主太荒唐了吧。

你就是发123也有可能收到两个包:12和3。这个是跟据网络状况自动分拆的。绝对不可以用SLEEP来分包
SharpKing515 2003-05-09
  • 打赏
  • 举报
回复
嗯。。
同意楼上意见!
BCB 2003-05-09
  • 打赏
  • 举报
回复
用Sleep( )实现字节流边界太荒唐,用字节标志呀

qibo999 2003-05-09
  • 打赏
  • 举报
回复
那就加个判断,看是否接受成功,在处理,个人觉得不应使用Sleep()
txt587 2003-05-09
  • 打赏
  • 举报
回复

跟楼上的一样
wolong1 2003-05-09
  • 打赏
  • 举报
回复
帮你up,多给点分
恭喜楼主发财!!!!!!!
shark_dim 2003-05-08
  • 打赏
  • 举报
回复
不,比如,我用
for(;;)
{
Socket->SendText("123");
Sleep(??);
}
来发送数据的时候,我本地接收的时候,我想接收到的讯息是"123",而不是123123123123...
因此,我需要一个Sleep的时间,我就是想知道,如何判断并计算出这个时间!!!!!!!!
耙子 2003-05-08
  • 打赏
  • 举报
回复
思路就不对,

你应该以流的方式来处理接收,
因为有可能一个 "1231231312" 会分为 2个包发送,就是说你可能这个字符串可能跨包,
所以你因该自己定仪标志位,以标志位来区分是否受到一个完整的字符串。

比如,这个sendtext是按照回车来区分的。
shark_dim 2003-05-08
  • 打赏
  • 举报
回复
错了,应该是:Sleep的时间怎么计算???

1,317

社区成员

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

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