Harmony OS 网络编程 实验指南

netcat简介

netcat 是什么?

netcat是一个非常强大的网络实用工具,可以用它来调试TCP/UDP应用程序;

netcat 如何安装?

Linux上可以使用发行版的包管理器安装,例如Debian/Ubuntu上:

  • sudo apt-get install netcat

Windows上,MobaXterm工具上也可以用 apt-get install netcat 安装;

netcat 如何使用?

开始之前,先简单介绍一下 netcat 的几种用法:

  1. TCP服务端模式: netcat -l 5678 ,会启动一个TCP服务器,监听5678端口,你可以换成其他端口;
  2. TCP客户端模式: netcat localhost 5678, localhost是目标主机参数,可以换成其他你想要连接的主机(主机名、IP地址、域名都可以),5678是端口;
    • 你如果在同一台机器的两个终端中分别执行上述两条命令,它们两者之间就会建立连接一条TCP连接,此时你在其中一个终端上输入字符,敲回车就会发送到另一个终端中;
  3. UDP服务端模式: netcat -u -l 6789, 没错,只需要加一个-u参数,就可以启动一个UDP服务端;
  4. UDP客户端模式: netcat -u localhost 6789
    • 类似的,在同一台机器的两个终端中分别执行上述两条命令,他们两者之间也可以收发消息,只不过是UDP报文;

LwIP简介

LwIP是什么?

A Lightweight TCP/IP stack 一个轻量级的TCP/IP协议栈

LwIP在openharmony上的应用情况

目前,openharmony源码树有两份LwIP:

  1. third_party/lwip
    • 源码形式编译
    • 供liteos-a内核使用
    • 还有一部分代码在kernel/liteos_a中,一起编译
  2. vendor/hisi/hi3861/hi3861/third_party/lwip_sack
    • hi3861-sdk的一部分
    • 静态库形式编译
    • 不可修改配置
    • 可以查看当前配置(vend

下载源码

建议将本教程的源码下载到鸿蒙源码树的顶层目录,即和applicationsbuild等目录平级的地方:

  • 执行命令git clone https://gitee.com/hihopeorg/HarmonyOS-IoT-Application-Development.git

文件说明

文件:

文件名说明
BUILD.gn鸿蒙构建脚本,支持Hi3861、Hi3518、Hi3516开发板
demo_entry_cmsis.c鸿蒙liteos-m程序入口,支持Hi3861
demo_entry_posix.c鸿蒙liteos-a和Unix系统程序入口,Hi3516、Hi3518、PC
MakefileUnix系统构建脚本,支持Linux/Mac OS
net_common.h系统网络接口头文件
net_demo.hdemo脚手架头文件
net_params.h网络参数,包括WiFi热点信息,服务器IP、端口信息
tcp_client_test.cTCP客户端
tcp_server_test.cTCP服务端
udp_client_test.cUDP客户端
udp_server_test.cUDP服务端
wifi_connecter.c鸿蒙WiFi STA模式API的封装实现文件,比鸿蒙原始接口更容易使用
wifi_connecter.h鸿蒙WiFi STA模式API的封装头文件,比鸿蒙原始接口更容易使用

Linux主机实验指南

编译测试程序

使用如下命令进行编译:

  1. make 编译测试程序,该命令会生成4个可执行文件和几个.o文件
  2. make clean删除可执行程序和.o文件

运行测试程序

Linux系统可以在同一台机器上,使用多个终端进行测试;

  • TCP客户端测试:
    1. 在一个终端中使用netcat启动一个TCP服务端:netcat -l 5678
    2. 在另一个终端中启动TCP客户端测试程序:./tcp_client_test 5678 127.0.0.1 ;
    3. 在netcat终端中应该会出现TCP客户端测试程序发来的:Hello,输入World并回车,World将会发送到测试程序所在终端;
  • TCP服务端测试:
    1. 在一个终端中启动TCP服务端测试程序:./tcp_server_test 5678 ;
    2. 在另一个终端中使用netcat启动一个TCP客户端,并尝试连接测试程序:netcat 127.0.0.1 5678
    3. 在netcat终端中输入Hello并回车,终端应该会再输出一行Hello,后面一行是TCP服务端测试程序发送回来的,同时终端上会有相关打印;
  • UDP客户端测试:
    1. 在一个终端中使用netcat启动一个UDP服务端:netcat -u -l 5678
    2. 在另一个终端中启动UDP客户端测试程序:./udp_client_test 5678 127.0.0.1 ;
    3. 在netcat终端中应该会出现UDP客户端测试程序发来的Hello.,输入World并回车,World将会发送到测试程序所在终端;
  • UDP服务端测试:
    1. 在一个终端中启动UDP服务端测试程序:./udp_server_test 5678 ;
    2. 在另一个终端中使用netcat启动一个UDP客户端,并尝试连接测试程序:netcat -u 127.0.0.1 5678
    3. 在netcat终端中输入Hello.并回车,终端应该会再输出一行Hello.,后面一行是UDP服务端测试程序是发送回来的,同时终端上会有相关打印;

Hi3861开发板实验指南

准备网络环境

在Hi3861开发板上运行上述四个测试程序之前,需要先准备网络环境:

  1. 准备一个无线路由器,
  2. 将Linux系统的PC连接到这个无线路由器,
    • 如果是虚拟机运行的Linux系统,需要通过网线连接路由器,并且将虚拟机网口设置为“桥接网卡”,确保能够从路由器分到IP地址(这一点非常重要,因为默认是NAT模式,只能通过虚拟机访问外部环境,外部环境无法通过网络访问虚拟机);

修改网络参数

在Hi3861开发板上运行上述四个测试程序之前,需要根据你的无线路由、Linux系统IP修改net_params.h文件的相关代码:

  • PARAM_HOTSPOT_SSID 修改为你的热点名称
  • PARAM_HOTSPOT_PSK 修改为你的热点密码;
  • PARAM_SERVER_ADDR 修改为你的Linux主机IP地址;

编译和烧录测试程序

在Hi3861开发板上运行上述四个测试程序,需要分别编译、烧录程序;

  1. 需要修改BUILD.gn代码,取消你想要执行的测试程序的注释:
    • 编译TCP客户端测试程序,取消 sources = ["tcp_client_test.c"] 的注释,保留其余三行的sources注释;
    • 编译TCP服务端测试程序,取消 sources = ["tcp_server_test.c"] 的注释,保留其余三行的sources注释;
    • 编译UDP客户端测试程序,取消 sources = ["udp_client_test.c"] 的注释,保留其余三行的sources注释;
    • 编译UDP服务端测试程序,取消 sources = ["udp_server_test.c"] 的注释,保留其余三行的sources注释;
  2. 确认你已经修改了hi3861开发板的编译配置文件build/lite/product/wifiiot.json
    • "//applications/sample/wifi-iot/app"替换为:"//HarmonyOS-IoT-Application-Development:app"
  3. 使用python build.py wifiiot进行编译;
  4. 使用DevEco Device Tool或者HiBurn将二进制程序烧录到Hi3861开发板上;
  5. 烧录成功后暂时不要复位程序;

运行测试程序

Hi3861开发板上运行测试程序的操作流程和Linux上大体相同,只是Linux终端执行测试程序变成了——开发板复位后自动运行;

  • TCP客户端测试:
    1. 在Linux终端中使用netcat启动一个TCP服务端:netcat -l 5678
    2. 连接开发板串口,复位开发板,板上程序启动后,首先会连接WiFi热点,然后会尝试连接到Linux上用netcat启动的TCP服务端;
    3. 在Linux终端中应该会出现开发板上TCP客户端通过发来的Hello,输入World并回车,World将会发送到开发板上,同时开发板的串口会有相关打印;
  • TCP服务端测试:
    1. 重新修改BUILD.gn,放开sources = ["tcp_server_test.c"]的注释,保留其他三行的注释,重新编译、烧录到开发板上;
    2. 连接开发板串口,复位开发板,板上程序启动后,会首先连接WiFi热点,然后会启动TCP服务端,并监听5678端口;
      • 这里需要从串口日志上查看开发板的IP地址,下一步操作需要用到
    3. 在Linux终端中使用netcat启动一个TCP客户端,并尝试连接到开发板:netcat board_ip 5678,其中board_ip是开发板的IP地址;
    4. 在Linux终端中输入Hello并回车,终端应该会再输出一行Hello,后面一行是开发板上TCP服务端序发送回来的,同时开发板的串口会有相关打印;
  • UDP客户端测试:
    1. 重新修改BUILD.gn,放开sources = ["udp_client_test.c"]的注释,保留其他三行的注释,重新编译、烧录到开发板上;
    2. 在Linux终端中使用netcat启动一个UDP服务端:netcat -u -l 5678
    3. 连接开发板串口,复位开发板,板上程序启动后,首先会连接WiFi热点,然后会尝试连接到Linux上用netcat启动的UDP服务端;
    4. 在Linux终端中应该会出现UDP客户端测试程序发来的Hello.,输入World并回车,World将会发送到开发板上,同时开发板的串口会有相关打印;
  • UDP服务端测试:
    1. 重新修改BUILD.gn,放开sources = ["udp_server_test.c"]的注释,保留其他三行的注释,重新编译、烧录到开发板上;
    2. 连接开发板串口,复位开发板,板上程序启动后,会首先连接WiFi热点,然后会启动UDP服务端,并监听5678端口;
    3. 在Linux终端中使用netcat启动一个UDP客户端,并尝试连接到开发板:netcat -u 127.0.0.1 5678
    4. 在Linux终端中输入Hello.并回车,终端应该会再输出一行Hello.,后面一行是UDP服务端测试程序是发送回来的,同时开发板的串口会有相关打印;

Hi3516开发板实验指南

准备网络环境

和在Hi3861开发板上运行测试程序类似,在Hi3516开发板上运行四个测试程序之前,需要先准备网络环境:

  1. 准备一个无线路由器,
  2. 将Linux系统的PC连接到这个无线路由器,
    • 如果是虚拟机运行的Linux系统,需要通过网线连接路由器,并且将虚拟机网口设置为“桥接网卡”,确保能够从路由器分到IP地址(这一点非常重要,因为默认是NAT模式,只能通过虚拟机访问外部环境,外部环境无法通过网络访问虚拟机);

编译测试程序

  1. 确认你已经修改了Hi3516开发板的编译配置文件build/lite/product/ipcamera_hi3516dv300.json

    • "//applications/sample/camera/app:camera_app"所在行之前添加一行配置:

      { "name": "net_test", "dir": "//HarmonyOS-IoT-Application-Development:app", "features":[] },

  2. 使用python build.py ipcamera_hi3516dv300进行编译;

  3. 编译成功后在out/ipcamera_hi3516dv300/bin目录下会生成四个测试程序:

$ find out/ipcamera_hi3516dv300/ -name *_test
out/ipcamera_hi3516dv300/bin/udp_server_test
out/ipcamera_hi3516dv300/bin/udp_client_test
out/ipcamera_hi3516dv300/bin/tcp_client_test
out/ipcamera_hi3516dv300/bin/tcp_server_test

将测试程序转移到开发板上

有多种方式可以将测试程序从你的Linux主机转移到Hi3516开发板上:

  • 重新烧写rootfs.img映像文件到开发板;

    • 这种方式会刷写整个rootfs分区;
  • 通过T-Flash拷贝;

    • 先将上述四个测试程序从Linux主机拷贝到T-Flash卡上,
    • 再将T-Flash卡从Linux主机上拔下来,插到Hi3516开发板上;
    • 然后将测试程序从T-Flash卡中拷贝到开发板文件系统上;
  • 通过网络和TFTP传输;

    • 先确认Linux主机和开发板直接的IP地址在同一个网段;
      • 可以用ping命令互相测试;
    • 将Linux主机上的几个测试程序拷贝到tftp目录下;
      • Linux系统上安装和配置tftp服务,可参考:https://community.arm.com/developer/tools-software/oss-platforms/w/docs/495/tftp-remote-network-kernel-using-u-boot
    • 在开发上,通过tftp命令从Linux主机下载测试程序;
      • 先cd到一个有写权限的位置,例如 /usrdata/
      • 执行tftp下载命令:tftp -g -l tcp_client_test -r tcp_client_test $LINUX_IP ,其中$LINUX_IP是你的Linux主机的IP地址

运行测试程序

Hi3861开发板上运行测试程序的操作流程和Linux上几乎完全相同,只是Linux终端执行测试程序变成了——在开发板上的串口终端中执行;

  • TCP客户端测试:
    1. 在Linux终端中使用netcat启动一个TCP服务端:netcat -l 5678
    2. 在开发板串口终端中启动TCP客户端测试程序:./tcp_client_test 5678 $LINUX_IP ,其中$LINUX_IP是你的Linux主机的IP地址;
    3. 在netcat终端中应该会出现TCP客户端测试程序发来的:Hello,输入World并回车,World将会发送到测试程序所在终端;
  • TCP服务端测试:
    1. 在开发板串口终端中启动TCP服务端测试程序:./tcp_server_test 5678 ;
    2. 在Linux终端中使用netcat启动一个TCP客户端,并尝试连接测试程序:netcat $BOARD_IP 5678,其中$BOARD_IP是开发板的IP地址;
    3. 在Linux终端中输入Hello并回车,终端应该会再输出一行Hello,后面一行是开发板上TCP服务端测试程序发送回来的,开发板串口终端上会有相关打印;
  • UDP客户端测试:
    1. 在Linux终端中使用netcat启动一个UDP服务端:netcat -u -l 5678
    2. 在开发板串口终端中启动UDP客户端测试程序:./udp_client_test 5678 $LINUX_IP,其中$LINUX_IP是你的Linux主机的IP地址;
    3. 在Linux终端中应该会出现UDP客户端测试程序发来的Hello.,输入World并回车,World将会发送到开发板上,开发板串口终端上会有相关打印;
  • UDP服务端测试:
    1. 在开发板串口终端中启动UDP服务端测试程序:./udp_server_test 5678 ;
    2. 在Linux终端中使用netcat启动一个UDP客户端,并尝试连接测试程序:netcat -u $BOARD_IP 5678,其中$BOARD_IP是开发板的IP地址;
    3. 在Linux终端中输入Hello.并回车,终端应该会再输出一行Hello.,后面一行是UDP服务端测试程序是发送回来的,开发板串口终端上会有相关打印;

Hi3518开发板实验指南

准备网络环境

和在Hi3861开发板上运行测试程序类似,在Hi3518开发板上运行四个测试程序之前,需要先准备网络环境:

  1. 准备一个无线路由器,
  2. 将Linux系统的PC连接到这个无线路由器,
    • 如果是虚拟机运行的Linux系统,需要通过网线连接路由器,并且将虚拟机网口设置为“桥接网卡”,确保能够从路由器分到IP地址(这一点非常重要,因为默认是NAT模式,只能通过虚拟机访问外部环境,外部环境无法通过网络访问虚拟机);

Hi3518开发板连接WiFi热点

Hi3518连接WiFi热点需要使用wpa_supplicant和相关配置文件;

  • 编译wap_supplicant程序:

    1. 打开编译wpa_supplicant编译配置:

      • 修改配置文件applications\sample\camera\communication\BUILD.gn中的features,向其中添加:

        "wpa_supplicant:wpa_sample"

    2. 执行编译命令:python build.py ipcamera_hi3518ev300

  • 准备wap_supplicant配置文件;

country=GB
ctrl_interface=udp
network={ssid="example" # 热点名称# key_mgmt=NONE # for OPEN Access Pointpsk="12345678" # 热点密码
}
  • 将编译生成的wpa_supplicant程序和准备好的wpa_supplicant.conf拷贝到T-Flash卡,然后将T-Flash卡插到开发板上;

  • 运行wpa_supplicant程序,开发板启动后,在串口终端中:

    • 执行命令:cd sdcard, 跳转到T-Flash卡所在目录,
    • 执行命令:wpa_supplicant -i wlan0 -c wpa_supplicant.conf,如果配置文件中的热点名称和密码没错的话,将会连接上WiFi热点;
    • 执行命令:ifconfig,查看网络配置信息,连接WiFi热点成功之后,可以查看到IP地址;

编译测试程序

和Hi3516开发板的操作流程一致,参考前面的描述;

将测试程序转移到开发板上

和Hi3516开发板的操作流程一致,参考前面的描述;

运行测试程序

和Hi3516开发板的操作流程一致,参考前面的描述;

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/771982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

别想宰我,怎么查看云厂商是否超卖?详解 cpu steal time

据说有些云厂商会超卖,宿主有 96 个核心,结果卖出去 100 多个 vCPU,如果这些虚机负载都不高,大家相安无事,如果这些虚机同时运行一些高负载的任务,相互之间就会抢占 CPU,对应用程序有较大影响&a…

缺省和重载。引用——初识c++

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 C输入&输出cout 和cin<<>> 缺省参数全缺省半缺省应用场景声明和定义分离的情况 函数重载1.参数的类型不同2.参数的个数不同3.参数的顺…

生成可读取配置文件的独立运行jar程序

前言: 周五刚躺下,前线打来语音要个下载文件的小程序,下载路径和下载码需要根据配置获取,程序需要在服务器执行。当然配置的设计是个人设计的,不然每次更新下载码都要重新出具jar包,太麻烦。多年没写独立运行的jar包了,翻阅了相关资料,最终还是功夫不负有心人。想着这种…

Redis锁,乐观锁与悲观锁

锁 悲观锁 认为什么时候都会出问题&#xff0c;无论做什么都会加锁 乐观锁 很乐观&#xff0c;认为什么时候都不会出问题&#xff0c;所以不会上锁。 更新数据时去判断一下&#xff0c;在此期间&#xff0c;是否有人修改过这个数据 应用于&#xff1a;秒杀场景 **watch*…

小折叠手机如何经久耐用?收下这份日常养护指南

不同于普通手机的玻璃屏幕&#xff0c;折叠机出于折叠的特性&#xff0c;使用了柔性屏幕。因此撕除原厂保护膜时&#xff0c;由于贴膜较强的粘合力&#xff0c;很容易就会导致屏幕产生不可修复的损伤。 这也是为什么各大手机厂商都不允许折叠机私自贴膜的原因&#xff0c;并且…

从产品组装和维护/维修的角度来看,基于增强现实的指导:关于挑战和机遇的最新综述

作者&#xff1a; 1. M. Eswaran 2. Anil Kumar Gulivindala 3. M.V.A.Raju Bahubalendruni 关于本文 •分析了增强现实在装配和维护/维修中的作用。 •讨论了AR辅助制造系统的软件和硬件元素。 •讨论了AR跟踪和配准技术面临的挑战。 •讨论了AR辅助制造系统的未来…

视频素材app有哪些?视频素材网址推荐

在这个视觉传达愈发重要的时代&#xff0c;拥有一款好的无水印短视频素材网站就如同握有一把打开创意之门的钥匙&#xff0c;选择合适的短视频素材平台至关重要&#xff0c;这会让你的视频制作更加轻松而高效。 1&#xff0c;蛙学府 以其广泛的优质视频素材库而闻名&#xff0…

Maven发布开源框架到远程仓库

1.背景 当你写了一个自我感觉良好的开源工具希望给他人分享&#xff0c;如果只是在github等网站进行公布之外&#xff0c;用户使用起来还不是很方便&#xff0c;特别是当你提供是特定领域的基础工具。你还可以把它部署到中央仓库&#xff0c;这样别人使用就会方便很多。接下来…

后端常见面经之MySQL

MySQL字段类型 数值类型 整型经常被用到&#xff0c;比如 tinyint、int、bigint 。默认是有符号的&#xff0c;若只需存储无符号值&#xff0c;可增加 unsigned 属性。 int(M)中的 M 代表最大显示宽度&#xff0c;并不是说 int(1) 就不能存储数值10了&#xff0c;不管设定了显…

【@changesets/cli】变更集实战教程

一、背景概述 前端目前基于Monorepo架构的npm包开发很普遍&#xff0c;在开发完毕后&#xff0c;我们需要对包进行版本号升级&#xff0c;并且部署&#xff0c;这些操作如果是手动来操作的话&#xff0c;很麻烦&#xff0c;而且容易出错。 例如有这样的场景&#xff1a; -ap…

1.Git快速入门

文章目录 Git快速入门1.Git概述2.SCM概述3.Git安装3.1 软件下载3.2 软件安装3.3 软件测试 Git快速入门 1.Git概述 Git是一个免费的&#xff0c;开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目&#xff0c;Git易于学习&#xff0c;占用空间小&…

供应链 | 顶刊OR论文精读:在线最小峰值作业调度的竞争算法

Competitive Algorithms for the Online Minimum Peak Job Scheduling 本文为OR期刊论文&#xff0c;原文信息&#xff1a; Clia Escribe, Michael Hu, Retsef Levi (2023) Competitive Algorithms for the Online Minimum Peak Job Scheduling. Operations Research. Article…

ZYNQ学习之PetaLinux开发环境搭建

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ FTP&#xff1a;File Transfer Protocol 一、Ubuntu 和 Windows 文件互传 1.1、开启 Ubu…

【git分支管理策略】如何高效的管理好代码版本

目录 1.分支管理策略 2.我用的分支管理策略 3.一些常见问题 1.分支管理策略 分支管理策略就是一些经过实践后总结出来的可靠的分支管理的办法&#xff0c;让分支之间能科学合理、高效的进行协作&#xff0c;帮助我们在整个开发流程中合理的管理好代码版本。 目前有两套Git…

【线段树】第十三届蓝桥杯省赛C++ A组 Java C组 Python A组/B组《最长不下降子序列》(C++)

【题目描述】 给定一个长度为 N 的整数序列&#xff1a;,,⋅⋅⋅,。 现在你有一次机会&#xff0c;将其中连续的 K 个数修改成任意一个相同值。 请你计算如何修改可以使修改后的数列的最长不下降子序列最长&#xff0c;请输出这个最长的长度。 最长不下降子序列是指序列中的…

python每日分析练习:产品季度销售的比较分析

这次我们将关注一家零售公司的季度销售分析。 假设场景 一家零售公司希望分析其过去一年内各季度的销售表现&#xff0c;以便更好地理解其业务趋势&#xff0c;评估不同产品类别的表现&#xff0c;并优化未来的销售策略。 分析目的 理解季度销售趋势&#xff1a;分析公司整体…

Mac 装 虚拟机 vmware、centos7等

vmware&#xff1a; https://www.vmware.com/products/fusion.html centos7 清华镜像&#xff1a; 暂时没有官方的 m1 arm架构镜像 centos7 链接: https://pan.baidu.com/s/1oZw1cLyl6Uo3lAD2_FqfEw?pwdzjt4 提取码: zjt4 复制这段内容后打开百度网盘手机App&#xff0c;操…

C语言例4-7:格式字符f的使用例子

%f&#xff0c;实型&#xff0c;小数部分为6位 代码如下&#xff1a; //格式字符f的使用例子 #include<stdio.h> int main(void) {float f 123.456;double d1, d2;d11111111111111.111111111;d22222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n&qu…

服务运营|香港大学雷骁:收益管理中价格歧视的公平性

编者按&#xff1a; INFORMS George B. Dantzig Dissertation Award 用于表彰运筹学和管理科学领域中具有创新性和实用性的最佳毕业设计。香港大学助理教授雷骁题为“Revenue Management in Video Games and With Fairness” 是这一奖项2023年度的提名者之一。 这篇毕业设计重…

github vscode 笔记

目录 前言1. 新建代码库2. 下载代码到本地3. 更新代码并上传到github 前言 github方便多人协作维护代码。该笔记记录了下面三个过程&#xff1a; 在github上新建代码库&#xff0c;下载代码到本地&#xff0c;将更新代码并上传到github 1. 新建代码库 2. 下载代码到本地 链…