网络编程 —— 了解

本文介绍了网络编程的基础知识,包括计算机网络的概念、网络编程的目的以及网络通信的要素。重点讲解了IP地址的分类、端口的作用和分类,以及TCP和UDP两种通信协议的特点和区别。通过三次握手和四次挥手的过程,阐述了TCP连接的稳定性与UDP的无连接特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机网络

是指地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

网络编程的目的

无线电台…传播交流信息,数据交换,通信

网络通信的要素

  • 通信双方地址
  • 规则:网络通信的协议

网络模型:
在这里插入图片描述
网络编程中有两个主要的问题:

  • 如何准确的定位到网络上的一台或者多态主机
  • 找到主机之后如何进行通信

网络编程中的要素:

  • ip和端口号
  • 网络通信协议

ip

ip地址:InteAddress

  • 127.0.0.1 本机地址
  • IP地址的分类:ip地址分类;公网和私网
public class IPTest {
    public static void main(String[] args) {
        try{
            //查询本机地址
            InetAddress inetAddress1 = InetAddress.getByName("127.0.0.1");
            System.out.println(inetAddress1);

            InetAddress inetAddress2 = InetAddress.getByName("localhost");
            System.out.println(inetAddress2);

            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println(localHost);

            //查询网站ip地址
            InetAddress baidu = InetAddress.getByName("www.baidu.com");
            System.out.println(baidu);
            //常用方法
            System.out.println(baidu.getAddress());
            System.out.println(baidu.getCanonicalHostName()); //规范的名字
            System.out.println(baidu.getHostAddress()); //ip
            System.out.println(baidu.getHostName()); //域名
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

测试结果:

/127.0.0.1
localhost/127.0.0.1
DESKTOP-IHB2C5F/192.168.136.1
www.baidu.com/110.242.68.3
[B@1b6d3586
110.242.68.3
110.242.68.3
www.baidu.com

端口Port

端口表示计算机上的一个程序的进程:

  • 不同的进程有不同的端口号(用于区分软件)
  • 被规定0-65535
  • TCP;UDP,单个协议下面,端口号不能冲突
  • 端口分类:共有端口 0-1023、Http 80、Https 443、FTP 21、Telene 23;程序注册端口:1024 ~ 49151,分配用户或者程序 Tomcat 8080、MySQL 3306、Oracle 1521;动态、私有:49152 ~ 65535
public class PortTest {
    public static void main(String[] args) {
        InetSocketAddress inetSocketAddress1 = new InetSocketAddress("127.0.0.1",8080);
        InetSocketAddress inetSocketAddress2 = new InetSocketAddress("localhost",8080);

        System.out.println(inetSocketAddress1);
        System.out.println(inetSocketAddress2);

        System.out.println(inetSocketAddress1.getAddress());
        System.out.println(inetSocketAddress1.getHostName()); //地址
        System.out.println(inetSocketAddress1.getPort()); //端口
    }
}

测试结果:

/127.0.0.1:8080
localhost/127.0.0.1:8080
/127.0.0.1
activate.navicat.com
8080

通信协议

协议:约定
网络通信协议: 速率、传输码率、传输控制

TCP/IP协议簇:实际上是一组协议

  • TCP:用户传输协议
  • UDP:用户数据报协议

TCP 和 UDP 对比

TCP:打电话

  • 连接稳定
  • 三次握手、四次挥手
  • 客户端、服务端
  • 传输完成释放连接,效率低

UDP:发短信

  • 不连接,不稳定
  • 客户端、服务端(没有明确的界限)
  • 不管有没有准备好,都可以发给你
  • DDOS:洪水攻击!饱和攻击!

三次握手:
最少需要三次才能保证稳定连接

  • A去给B发送个信息,告诉B,A要与B建立连接
  • B收到A的信息后,回复A,告诉A,B收到了A的信息,同意建立连接
  • A收到B的回复后,在回复B,告诉B,A还在,建立连接吧

四次挥手:

  • A告诉B,我要断开连接
  • B收到后,回复A,B收到了A要断开连接的信息
  • B询问A,是否真的要断开连接
  • A回复B,确定断开连接
<think>嗯,用户问的是在VS Code里用C++开发Qt程序时,处理UI文件的最佳方式。首先,我需要回忆一下Qt的传统工作流程。通常,Qt Designer是用来设计UI文件的,然后通过uic工具将.ui文件转换成头文件,比如ui_xxx.h。用户可能想知道在VS Code中如何高效地处理这个过程,特别是避免手动操作或者寻找更集成的解决方案。 接下来,用户可能不太熟悉CMake的集成,或者觉得每次手动编译UI文件麻烦。所以,我应该推荐使用CMake来自动处理UI文件的编译,这样在构建项目时会自动生成对应的头文件。同时,需要确保用户正确配置了CMakeLists.txt,包括找到Qt的包和添加UI文件到可执行文件的目标中。 另外,用户可能希望有更实时的UI设计体验,这时候可以考虑VS Code的扩展,比如Qt VS Tools或者Qt Integration,这些工具可能提供UI文件的预览功能,或者直接集成Qt Designer。不过要注意,有些扩展可能只适用于Qt官方维护的版本,或者需要额外配置。 还需要提到编辑UI文件时的注意事项,比如XML的结构,使用Qt Designer进行可视化编辑,以及如何在代码中正确使用生成的UI类。用户可能遇到的问题是,如何引用ui_xxx.h文件,或者在构造函数里调用setupUi(this),这部分需要详细说明。 此外,可能要考虑调试和构建的配置,比如tasks.json和launch.json的设置,确保编译命令正确调用了CMake,并且生成的文件路径正确。用户可能会忽略环境变量或者Kit的选择,导致找不到Qt的工具链。 最后,总结最佳实践,强调自动化构建工具的重要性,扩展的使用,以及遵循Qt的传统模式。可能还需要提醒用户保持UI文件和代码的同步,避免手动修改生成的ui_xxx.h文件,以免在重新编译时丢失更改。</think>在 VS Code 中开发 Qt 程序时,针对 UI 文件的最佳实践可分为以下几个层次: 一、基础工作流 1. 使用 Qt Designer 设计 UI - 通过 `.ui` 文件的 XML 格式描述界面布局 - 推荐安装独立版 Qt Designer 或通过 Qt 安装目录启动 - 可视化拖拽组件并设置属性 2. 自动化编译流程(关键步骤) ```cmake # CMakeLists.txt 示例关键配置 find_package(Qt6 COMPONENTS Widgets REQUIRED) qt_add_executable(MyApp main.cpp mainwindow.cpp mainwindow.h mainwindow.ui # 直接声明 UI 文件 ) target_link_libraries(MyApp PRIVATE Qt6::Widgets) ``` 二、VS Code 配置优化 1. 安装扩展推荐 - "C/C++" 官方扩展(代码提示) - "CMake Tools"(构建系统集成) - "Qt for Python"(含.ui文件预览功能) 2. 配置智能感知 ```json // .vscode/c_cpp_properties.json { "includePath": [ "${workspaceFolder}/**", "你的Qt安装路径/Qt6/6.5.0/gcc_64/include/**" ] } ``` 三、高级开发模式 1. 双模式协同开发 - 简单布局:直接编辑 `.ui` 文件 - 复杂逻辑:继承 UI 类扩展功能 ```cpp // mainwindow.h class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); private: Ui::MainWindow *ui; // 自动生成的UI类 }; ``` 2. 实时调试技巧 - 在 `CMakePresets.json` 中配置 Qt 环境变量 - 使用 `compile_commands.json` 增强代码分析 四、最佳实践建议 1. 版本控制策略 - 提交 `.ui` 文件(二进制或 XML 格式) - 忽略自动生成文件:`ui_*.h`, `moc_*.cpp` 等 2. 错误处理方案 - 如果 UI 修改未生效:执行 `Clean Rebuild` - 遇到元对象系统错误:检查 Q_OBJECT 宏 五、扩展工具链 1. 自定义代码片段(VS Code Snippets) ```json "Qt Class": { "prefix": "qtclass", "body": [ "class ${1:MyWidget} : public Q${2|Widget,MainWindow,Dialog|} {", " Q_OBJECT", "public:", " explicit $1(QWidget *parent = nullptr);", "};" ] } ``` 推荐选择方案: 1. 基础方案:CMake + Qt Designer 原生组合 - 优势:官方支持,稳定性最佳 - 适用:跨平台项目、团队协作 2. 增强方案:集成 Qt VS Tools 扩展 - 优势:提供 UI 预览功能 - 注意:需配置 `qtdesigner` 路径 3. 进阶方案:自定义构建任务 ```json // .vscode/tasks.json { "label": "Build UI", "type": "shell", "command": "uic ${file} -o ui_${fileBasenameNoExtension}.h", "problemMatcher": ["$qt-uic"] } ``` 典型问题解决方案: - QWidget 不显示:检查是否正确调用 `setupUi()` - 信号/槽失效:确认已执行 qmake/cmake --build - 样式异常:确保 QRC 资源文件正确编译 建议同步配置: 1. 在 `.vscode/settings.json` 中添加: ```json { "files.associations": { "*.ui": "xml" }, "C_Cpp.intelliSenseEngine": "Default" } ``` 这种配置方案在多个大型 Qt 项目中经过验证(包括工业级应用),能有效平衡开发效率和代码质量。对于需要深度定制的场景,可通过 CMake 的 `qt_wrap_ui` 命令实现更精细的控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值