如何实现C++中MFC基于socket类的UDP通信的同时发送与接收?请各位高手帮帮忙啊。。。。。

本人用C++的MFC编写了一个UDP通信程序,派生了SOCKET类,用SendTo发送,OnReceive接收。具体是这样的,我建了A主对话框和B、C、D子对话框,其中A、B中有sendto,接收只在A中进行,现在,这个程序跟UDP调试助手(网上下载的)进行通信,可以单独发送,单独接收,但是一旦我这个程序不断的接收数据,在B中就无法输入数据进行发送,而A中可以发送成功,不明白为什么?是不是因为SOCKET类派生在A对话框下的原因?
我简述一下我的程序:

用MFC创建了主对话框A和它的非模态子对话框B,该程序与一ARM板进行基于SOCKET类的UDP通讯

在A、B的编辑框中输入数据,用SendTo命令发给ARM板,
ARM板的程序是evc程序,向对话框程序发送数据,
对话框A下,从socket派生了新类newsocket,其调用OnRneceive函数(只在A中调用)接收数据,并在对话框中显示出来

目前仍存在的问题是:

我将程序与UDP调试助手(网上下载的)进行通讯是成功的,即单独发送、单独接收以及UDP调试助手每1000ms向程序发送数据时,对话框程序仍能向UDP调试助手发送数据.
但是,当与ARM板通讯时,ARM板发来的数据(每100ms发一次数据)能够接收并显示,
这时向ARM板发送数据出现“xxxx内存,该内存不能为read”的错误提示,
而在发送(SendTo)处设断点调试(此时,ARM板仍每100ms发一次数据),发送是成功的

想问一下是什么原因,到底是发送出了问题,还是ARM板那边接收出了问题,还是对话框的发送与接收同时进行造成了内存区冲突(但与调试助手通讯却是成功的)?

第1个回答  2011-07-31
非模态子对话框!!!
这里要用多线程。
第2个回答  2011-07-19
第二个参数为所要发送的数据缓冲 也就是你要发送的内容
sendto(sockCLient, “hello”, 100, 0, (SOCKADDR *)&addrSrv, ilen);
可以直接写字符串也可以是一个变量
至于你想获得编辑框的内容
GetDlgItemText ()来获得
而如果想加终止符可以在末尾加"\r\n"
第3个回答  2011-08-04
可能是内存的问题,也可能是程序的兼容性问题.本回答被提问者采纳
第4个回答  2011-07-18
是不是阻塞了?
相似回答