永发信息网

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

答案:4  悬赏:0  手机版
解决时间 2021-02-13 05:34
  • 提问者网友:不爱我么
  • 2021-02-12 20:50
本人用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板那边接收出了问题,还是对话框的发送与接收同时进行造成了内存区冲突(但与调试助手通讯却是成功的)?
最佳答案
  • 五星知识达人网友:山有枢
  • 2021-02-12 21:05
可能是内存的问题,也可能是程序的兼容性问题.
全部回答
  • 1楼网友:酒醒三更
  • 2021-02-12 23:58
是不是阻塞了?
  • 2楼网友:风格不统一
  • 2021-02-12 23:23
第二个参数为所要发送的数据缓冲 也就是你要发送的内容 sendto(sockCLient, “hello”, 100, 0, (SOCKADDR *)&addrSrv, ilen); 可以直接写字符串也可以是一个变量 至于你想获得编辑框的内容 GetDlgItemText ()来获得 而如果想加终止符可以在末尾加"\r\n"
  • 3楼网友:渊鱼
  • 2021-02-12 22:45
非模态子对话框!!! 这里要用多线程。 再看看别人怎么说的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯