前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【QT】解决应用程序收不到指定端口数据的问题

【QT】解决应用程序收不到指定端口数据的问题

作者头像
半生瓜的blog
发布2023-06-23 14:51:22
3370
发布2023-06-23 14:51:22
举报
文章被收录于专栏:半生瓜のblog半生瓜のblog

背景

  • 前两天实习的时候,解决一版程序中的bug,修好后发现,其他机器可以正常运行,唯独有一台机子对我这版程序一直收不到数据。反而存在bug的版本,可以正常收数据。
  • 这里简要说明程序功能: 使用RJ45连接,使用局域网内的TCP进行通信。

解决

  • 先说最终的解决办法,控制面板->系统和安全->Windows Defender防火墙->允许应用或功能通过Windows Defender防火墙。
    • 然后找到程序,将这一行的三个勾都选上,(PS: 我也不太清楚这是为什么,跟我想得不太一下,详见【心路历程】。)点击确定, 重启你的程序。
  • 最暴力的方式,直接把防火墙关闭。

心路历程

在问题发生的最初,首先使用Wireshark抓包,

  • 发现在发往本机的指定端口上的TCP三次握手建链包被标注为:
代码语言:javascript
复制
[TCP Retransmission]
[TCP Port numbers reused] 
  • [TCP Retransmission]为超时重传,说明对方迟迟得不到本机的响应。
  • 而[TCP Port numbers reused] ,从字面意义上直译,我以为是端口被占用,于是使用相关命令查看指定端口状态。问题并未解决。
代码语言:javascript
复制
netstat -ano | findstr "port number"
  • 经搜索资料发现,[TCP Port numbers reused] 并不是端口被占用,而是,Wireshark会把重复使用的ip+port打上标记,port numbers reused是一个标记。并不是错误提示。

TCP Port numbers reused Set when the SYN flag is set (not SYN+ACK), we have an existing conversation using the same addresses and ports, and the sequence number is different than the existing conversation’s initial sequence number.

在设置 SYN 标志(不是 SYN+ACK)时设置,我们有一个使用相同地址和端口的现有会话,并且序列号与现有会话的初始序列号不同。

之后对程序进行入手。

  • 继续研究我尝试对程序入手,我尝试使用基于Qt图形界面的TCP/UDP调试工具对指定端口进行监听与模拟数据发送,并未得到响应。
  • 之后,开始在该机子上安装QT,尝试从源码寻找问题,但是我也觉得不是代码的问题,其一是我修改的部分并未涉及到数据通信代码,二是只有这台电脑运行程序存在问题,其他电脑可以正常运行,那么肯定是这台电脑独有的某个设置引起了这个问题。
  • 虽说不太相信,但是我还是尝试安装QT环境,该程序是在QT5的环境下开发的,在这台机子上使用国内源安装上的是QT6,而QT6并不向下兼容5,这就在编译程序的时候产生了很多报错,最终解决报错未果,遂放弃。
    • 使用国内源安装QT——Qt6安装教程——国内源
      • 即下载对应的下载器,使用powershell切换到所在文件夹,属于运行程序指令,并添加国内源后缀。例如: 使用清华源。
代码语言:javascript
复制
.\ xxx.exe --mirror http://mirrors.tuna.tsinghua.edu.cn/qt

误打误撞,开始研究防火墙设置。

  • 解决问题详见,【解决】部分。
  • 虽然问题解决了,但是有些细节还是跟我想得不一样。后续经过调试,发现,貌似改变一些设置后,每次打开该软件,会在列表中又出现一个。
image.png
image.png
  • 还有就是,我觉得仅仅勾选专用网络即可,但是发现并不行,还得勾上公用网络。相比与公用网络,专用网络拥有更高的权限。
image.png
image.png
  • 当然正如【解决】中所说,如果还是出现问题,那么直接把防火墙关闭,是最终解决办法。

总结

  • 在解决问题的时候需要理清思路,想想产生问题的可能。可能有些想法会一闪而过,如果可以的话记下来也不错。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 解决
  • 心路历程
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档