4

我正在编辑一个遗留的 MFC 应用程序,我必须添加一些基本的网络功能。操作方必须接收一个简单的指令(数字 1、2、3、4...)并根据它做一些事情。客户希望延迟尽可能快,所以我自然决定使用数据报 (UDP)。

但是阅读各种资源让我感到困惑。我无法CAsyncSocket在 MFC 中侦听 UDP 套接字 ( ),只能调用 Receive 阻止并等待。阻止用户界面并不是真正的聪明。所以我想我可以使用一些线程技术,但由于我对 MFC 的经验并不多,应该如何实现呢?

问题的另一部分是我应该这样做,还是恢复到 TCP,考虑可靠性和实施问题。我知道 UDP 不可靠,但它到底有多不可靠?我读到它的速度提高了 50%,这对我来说已经很多了。

我使用的参考资料:http: //msdn.microsoft.com/en-us/library/09dd1ycd (v=vs.80).aspx

4

3 回答 3

2

TCP 中的大部分“延迟”是建立初始连接所需的握手。

如果您的客户端应用程序要从您的 MFC 应用程序请求大量命令,那么 TCP 是不费吹灰之力的。客户端打开一个 TCP 连接并保持打开状态。

如果您的 MFC 应用程序要接收来自不同客户端的大量临时命令,那么 UDP 可能是合适的,但您必须权衡节省 TCP 握手的微小成本是否值得一个命令可能永远不会发生的可能性都是因为 UDP 把它扔掉了。

于 2012-10-20T09:58:45.373 回答
0

谢谢大家。综上所述,我决定尝试使用 UDP。至于我的实施问题,我自己找到了一个答案,这对我很有帮助,看起来它会让我的沟通井井有条。对于将来阅读或提出相同问题的人,两个简单的 CAsyncSocket 包装类:

http://www.codeproject.com/Articles/16581/Sending-Receiving-UDP-Datagrams-with-MFC-s-CAsyncS

于 2012-10-20T23:58:57.537 回答
0

为什么不能使用CAsyncSocket在 MFC 中收听 UDP 套接字?我有这样做的代码。使用端口号、SOCK_DGRAM 和 FD_READ 作为参数 调用Create() 。OnReceive()应该被自动调用。如果没有,您可以通过使用 FD_READ 参数调用AsyncSelect()来刺激它。

于 2016-01-11T16:07:42.720 回答