• 7705阅读
  • 17回复

upd 编程绑定同一端口获取数据处理问题? [复制链接]

上一主题 下一主题
离线yangtyes
 
只看楼主 倒序阅读 楼主  发表于: 2011-10-14
我现在的问题是,A主窗体绑定端口 60000,获取数据包,处理数据后显示数据,A窗体点击按钮弹出B窗体,现在B窗体也需要处理端口60000 的数据包,我直接在B窗体上绑定 60000后,A窗体就不能接收到 60000端口的数据包了,请问大哥些,这个问题怎么解决啊。。我是新手,用了网上说的什么
udpSocket->bind(port,QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);
没有效果。。。急。。谢谢大家了。
离线yangtyes
只看该作者 1楼 发表于: 2011-10-14
坐等高手了。。
离线yangtyes
只看该作者 2楼 发表于: 2011-10-14
还没人么,看来要等到晚上了。。希望能解决。
离线wxj120bw

只看该作者 3楼 发表于: 2011-10-15
回 2楼(yangtyes) 的帖子
换成udpSocket->bind(port,QUdpSocket::ShareAddress); 尝试下 还有详细说明下接受的情况
离线yangtyes
只看该作者 4楼 发表于: 2011-10-16
回 3楼(wxj120bw) 的帖子
谢谢你的答复,但是换成udpSocket->bind(port,QUdpSocket::ShareAddress); 还是不行,我自己已经试过了。
加载主窗体A的时候,连接bind端口60000,然后接受数据包,触发事件读取数据。。一直接受数据进行处理。500ms一个包。。。主窗体A显示处理后的数据的。。然后点击A窗体的一个按钮,弹出B窗体,B窗体初始的时候bind端口60000,处理同一类型的包,显示数据。。这个时候B窗体处理数据没有问题,但是A窗体就不能接受到包的数据进行处理了。。实际需求是A ,B窗体同时处理数据。。
离线jdwx

只看该作者 5楼 发表于: 2011-10-16
回 4楼(yangtyes) 的帖子
增加一个Object处理数据,A和B就负责显示数据,这样就是再有几个界面显示都没问题。
其实有时候研究一下那个MFC还是有好处的。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线wxj120bw

只看该作者 6楼 发表于: 2011-10-16
回 4楼(yangtyes) 的帖子
不知道推测的对不对 QUdpSocket::ShareAddress对同一进程的两个socket不起作用 可能对两个进程的socket会起作用 网上有人说前者情况下的第二个socket若关闭 第一个socket会继续收到数据 楼上的方法可以尝试
离线yangtyes
只看该作者 7楼 发表于: 2011-10-17
回 5楼(jdwx) 的帖子
谢谢回复,你说的确实是一个办法,对我来说比较麻烦。。如果最后不行也只能使用这个办法了。。因为我的子窗体很多,而每个子窗体需要的数据只是数据包的部分数据。。如果增加一个Object的数据处理,是不是这个Object需要从主窗体传入到各个子窗体? 因为程序加载首先是在主窗体进行处理数据。。
离线yangtyes
只看该作者 8楼 发表于: 2011-10-17
回 6楼(wxj120bw) 的帖子
谢谢wxj120bw,如果开不同进程那就更麻烦了。。我新手啊。。第2种关闭的方法,我马上试下。看看行不行。。
离线yangtyes
只看该作者 9楼 发表于: 2011-10-17
我突然想起,需求上还要求主窗体和子窗体同时处理数据。。好像关闭的方法也不能使用了,那样也只有子窗体处理完才给主窗体处理。。。实际需求是主窗体一直监听端口进行数据处理,当主窗体点击按钮弹出子窗体时,需要主窗体和子窗体同时处理同一端口的数据包。
离线jdwx

只看该作者 10楼 发表于: 2011-10-17
回 7楼(yangtyes) 的帖子
可以用全局Object处理数据,把接收到的数据缓存,分发给A和B,这样和AB同时接收并处理数据不是一样吗。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线yangtyes
只看该作者 11楼 发表于: 2011-10-17
回 10楼(jdwx) 的帖子
谢谢你的意见。。如果把接受的数据缓存,效率会不会有影响? 我现在是接收一个数据包就处理完了就直接丢弃这个包了。。。。我现在考虑是主窗体A绑定端口获取数据包,然后通过消息传入当前点击打开的子窗体B或者C,D。等等。。。绑定端口的就是主窗体A。其他窗口都从A传入数据包。。
离线jdwx

只看该作者 12楼 发表于: 2011-10-17
回 11楼(yangtyes) 的帖子
这是一个不太规范的办法,估计能好用。A->B->C......
最好还是分发数据,减少模块之间的依赖关系。当然要根据处理数据的时间开辟一块缓存(确实挺复杂),
程序还会有延迟(不能实时显示),这个问题在股票软件上能体现出来,大智慧全推行情就会比其它的股票软件
显示有延迟。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线yangtyes
只看该作者 13楼 发表于: 2011-10-17
回 12楼(jdwx) 的帖子
谢谢。。我是A->B或者A->C。。。我主窗体是一直全屏显示,一直处理数据包。大概500ms左右就一个数据包。。。如果开辟缓存的话,肯定很麻烦了。。我对这方面比较薄弱。。
离线jdwx

只看该作者 14楼 发表于: 2011-10-17
回 13楼(yangtyes) 的帖子
确实开辟缓存很麻烦。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线yangtyes
只看该作者 15楼 发表于: 2011-10-17
回 14楼(jdwx) 的帖子
恩,看来只有想其他办法了。。谢谢了。。

论坛的哪个大侠来帮忙解决解决啊。。。求助啊。
离线wxj120bw

只看该作者 16楼 发表于: 2011-10-17
回 15楼(yangtyes) 的帖子
通过这种方式QUdpSocket::ShareAddress实现 应该困难很大 很可能是qt得bug(猜的) 你系统是windows还是linux?
离线yangtyes
只看该作者 17楼 发表于: 2011-10-18
回 16楼(wxj120bw) 的帖子
谢谢,不好搞忘记说环境了。。。是Linux。。
快速回复
限100 字节
 
上一个 下一个