在MFC应用程序中聆听UDP或切换到TCP

Listening UDP or switch to TCP in a MFC application

本文关键字:TCP UDP MFC 应用程序 聆听      更新时间:2023-10-16

我正在编辑旧版MFC应用程序,我必须添加一些基本的网络功能。操作方必须收到一个简单的指令(数字1,2,3,4 ...),并根据此操作做点什么。客户希望延迟尽可能快,因此自然而然地,我决定使用数据报(UDP)。

但是阅读各种资源使我感到困惑。我无法听MFC中的UDP插座(CAsyncSocket),只能调用接收哪些块和等待。阻止UI并不是真正的聪明。因此,我想我可以使用一些线程技术,但是由于我不是MFC的所有人,应该如何实施?

问题的另一部分是我应该这样做,或考虑到可靠性和实施问题,还是还原为TCP。我知道UDP是不可靠的,但是真的有多不可靠吗?我读到它的速度高达50%,这对我来说很多。

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

TCP中的大多数"延迟"是设置初始连接所需的握手。

如果您的客户端应用程序将从您的MFC应用中请求大量命令,则TCP是无脑的。客户端打开TCP连接并保持打开状态。

如果您的MFC应用程序将接收来自不同客户的大量临时命令,那么UDP可能是合适的,但是您必须权衡是否可以节省TCP握手的轻微费用,值得命令可能有可能由于UDP将其扔掉,永远不会发生。

谢谢大家。从上面的所有内容中,我决定尝试使用UDP。至于我的实施问题,我自己找到了一个答案,这对我有很大帮助,看来这将使我的沟通井井有条。对于将来阅读或提出同样的人来说

http://www.codeproject.com/articles/16581/sending-receiving-udp-datagrams-with-mfc-s-casyncs

为什么不能使用Casyncsocket在MFC中收听UDP插座?我有这样做的代码。用端口号,sock_dgram和fd_read作为参数来调用Create()。OnReceive()应自动调用。如果没有,您可以通过使用FD_READ参数调用AsyncSelect()来产生它。