=================请大家来讨论一下 ====================

vxhelp 2003-10-17 11:06:16
我有服务器程序A与客户程序B,

现在要实现短连接,即B向A发请求,A处理后返回请求,断开连接.

在A中我是这么做的,建一个CSocket C与B连接

C::OnRecive
{
Recive B的请求,
处理请求
Send(处理结果)给B
============================>>>>有没有必要加一句Sleep(1000);
Close()
delete this;删除自己
}

我是想问如果B很忙的情况下,若不加Sleep(1000),会不会存在B收到不A的消息的情况?
我可以肯定B只会向A发一条消息,A返回B要要的结果后,就没有必要再保持连接了
所以我在A中与B通讯的CSocket的OnRecive中直接处理信息并Send出去,然后删除
自己, 我想知道这样通讯会不会有什么后果?(不确定性)

如果不这么做,有什么好的办法使A中的C处理完B的请求后就把自己删除?





...全文
28 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
scatzr 2003-10-21
  • 打赏
  • 举报
回复
udp本来就不能保证你能够成功收到数据撒。
呵呵,估摸着只是心里觉得不爽罢了。
fanfyj 2003-10-18
  • 打赏
  • 举报
回复
up
studyingpersons 2003-10-17
  • 打赏
  • 举报
回复
没关系的,就按你说得办。
我们公司里做的TCP通信跟你的程序很相似,客户端B向服务器发送一个消息,然后服务器A处理,接着用C返回给客户端一个消息,与此同时就关闭套接字C!!!
要记住FD_READ和FD_ACCEPT网络事件是水平触发的,也就是说当数据到达客户端B的时候,即使客户端B非常忙没有时间处理FD_READ网络事件,这个数据包也不会丢失,直到客户端B有时间处理FD_READ网络事件的时候,再去理会这个数据包就可以了!!
yaoha2003 2003-10-17
  • 打赏
  • 举报
回复
如果是UDP的话有sleep就一定能保证客户端能成功接收数据吗?用TCP本来就能保证啊
studyingpersons 2003-10-17
  • 打赏
  • 举报
回复
TCP通信,只要发送端发送成功,接收端就能够接收成功。
但是如果是UDP通信,那么就按楼上说的办!!!
flagfly 2003-10-17
  • 打赏
  • 举报
回复
不要sleep。否则在多个终端连接时,只能单线程地处理,下一个终端只能等上一个sleep完后才能被处理。
xiaohyy 2003-10-17
  • 打赏
  • 举报
回复
>>我是想问如果B很忙的情况下,若不加Sleep(1000),会不会存在B收到不A的消息的情况?

理论上应该会的。这种模型有可能会丢包。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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