当前位置: 首页 > news >正文

滑动窗口协议仿真(2024)

1.题目描述

滑动窗口协议以基于分组的数据传输协议为特征,该协议适用于在数据链路层以及传输层中对按 顺序传送分组的可靠性要求较高的环境。在长管道传输过程(特别是无线环境)中,相应的滑动窗口 协议可实现高效的重传恢复。附录 3 给出了一个选择性重传的滑动窗口协议的简单实现,以此为参考, 设计并实现一个滑动窗口协议的仿真,显示数据传送过程中的各项具体数据,双方帧的个数变化,帧 序号,发送和接受速度,重传提示等。


2.程序演示

 这里我们使用Socket来模拟滑动窗口协议,实现了双方帧的个数变化,帧序号,发送和接受速度控制,重传显示。

控制帧发送速度

双方帧的个数变化

丢失包


3.参考代码

接收端代码

#include <winsock2.h>
#include <iostream>
#include <list>
#include <time.h>
#include <unistd.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;//函数说明------------------------------
DWORD WINAPI ThreadFun(LPVOID lpThreadParameter);void init_app();//---------------------------------------
WSADATA wd;
SOCKET Socket;
sockaddr_in addrClient;
int len = sizeof(sockaddr_in);//变量------------------------------
struct Data {//消息类型定义int Type_ACK = 0;int Type_Msg = 1;int Type_Requst = 2;int Type_Retransmission=3;//消息内容int Msg_Code = 0;//消息序号int Msg_Type = 1;//消息类型int Msg_ACK=0;//是否已经ACK了char *Msg_Content[128];//消息内容int Send_WinSize = 4;//发送窗口大小
};Data Send_Msg_Data;
Data *Get_Msg_Data;
char Get_buf[1024] = {0}, send_buf[1024] = {0};int main() {//提示=======================================================================cout << "滑动窗口协议仿真(Socket模拟)_接收方" << endl;//初始化=======================================================================init_app();//==========================================================================
}DWORD WINAPI ThreadFun(LPVOID lpThreadParameter) {// 接受数据SOCKET This_Socket = (SOCKET) lpThreadParameter;cout << "*连接成功" << endl;// 循环接收客户端数据int ret = 0;do {//接收ret = recv(This_Socket, Get_buf, sizeof(Get_buf), 0);Get_Msg_Data = (Data *) Get_buf;cout << "\n收到消息:" << endl;cout << "类型:" << Get_Msg_Data->Msg_Type << " 序号: " << Get_Msg_Data->Msg_Code << endl;//发送if (Get_Msg_Data->Msg_Type==3){Send_Msg_Data.Msg_Type =3;} else{Send_Msg_Data.Msg_Type = 0;}Send_Msg_Data.Msg_Code = Get_Msg_Data->Msg_Code;memcpy(send_buf, &Send_Msg_Data, sizeof(Data));sleep(1);if (send(This_Socket, send_buf, sizeof(send_buf), 0) > 0) {cout << "\n回复帧:" << Send_Msg_Data.Msg_Code << " ACK" << endl;} else {cout << "\n失败回复:" << Send_Msg_Data.Msg_Code << " ACK" << endl;}} while (ret != SOCKET_ERROR && ret != 0);return 0;
}void init_app() {if (WSAStartup(MAKEWORD(2, 2), &wd) != 0) {cout << "WSAStartup Error:" << WSAGetLastError() << endl;return;}// 创建流式套接字Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (Socket == INVALID_SOCKET) {cout << "socket error:" << WSAGetLastError() << endl;return;}//绑定端口和ipsockaddr_in addr;memset(&addr, 0, sizeof(sockaddr_in));addr.sin_family = AF_INET;addr.sin_port = htons(8000);addr.sin_addr.s_addr = inet_addr("127.0.0.1");//服务端bind绑定if (bind(Socket, (SOCKADDR *) &addr, len) == SOCKET_ERROR) {cout << "bind Error:" << WSAGetLastError() << endl;return;}// 监听listen(Socket, 5);//主线程循环接收客户端的连接while (true) {cout << "*等待连接..." << endl;// 接受成功返回与client通讯的SocketSOCKET Client = accept(Socket, (SOCKADDR *) &addrClient, &len);if (Client != INVALID_SOCKET) {// 创建线程,并且传入与client通讯的套接字HANDLE hThread = CreateThread(NULL, 0, ThreadFun, (LPVOID) Client, 0, NULL);CloseHandle(hThread); // 关闭对线程的引用}}
}

发送端代码

#include<winsock2.h>//winsock2的头文件
#include<iostream>
#include <list>
#include <ctime>#pragma comment(lib, "ws2_32.lib")using namespace std;//定义========================
void Init_Socket();void *SendMsg(void *pVoid);int getRand(int min, int max);void Sycn();void Send_Win_Move();void Retransmission(int Num);//发送的数据=======================
struct Data {//消息类型定义int Type_ACK = 0;int Type_Msg = 1;int Type_Requst = 2;int Type_Retransmission = 3;//消息内容int Msg_Code = 0;//消息序号int Msg_Type = 1;//消息类型int Msg_ACK = 0;//是否已经ACK了char *Msg_Content[128];//消息内容int Send_WinSize = 4;//发送窗口大小
};//默认参数=======================
int Rand_Num = 5;//随机概率1/5
int Receiver_WinSize = 10;
int Send_WinSize = 5;
int Send_Size = 10;
int ACK_OutTime = 10;
int Send_Num = 100;
char *Send_Msg = "0123456789";
SOCKET Socket;
int Win_Now_Size = 0;//消息列表=======================
list<Data> MSG_Win_List;
Data Send_Msg_Data;
Data *Get_Msg_Data;
Data *Temp_Msg_Data;
int Num = 0;
char send_buf[1024] = {0}, Get_buf[1024] = {0};void init_data() {char auto_data;//提示=======================================================================cout << "*====滑动窗口协议仿真(Socket模拟)_发送方====*\n";cout << "\n-------------------------------\n";cout << " 请输入必要参数(y/n):";cin >> auto_data;if (auto_data == 'n') {cout << " 发送窗口: ", cout << Send_WinSize << endl;cout << " 消息帧数: ", cout << Send_Num << endl;
//        cout << " 发送内容: ", cout << Send_Msg << endl;} else {cout << " 发送窗口: ", cin >> Send_WinSize;cout << " 消息帧数: ", cin >> Send_Num;}cout << "-------------------------------" << endl;system("pause");}int main() {init_data();Init_Socket();//接收服务端的消息pthread_t tids;pthread_create(&tids, NULL, SendMsg, &Socket);//随时给服务端发消息do {int ret = 0;do {ret = recv(Socket, Get_buf, sizeof(Get_buf), 0);Get_Msg_Data = (Data *) Get_buf;if (ret != SOCKET_ERROR && ret != 0) {cout << "\n\n\t==>收到帧:" << " ACK: " << Get_Msg_Data->Msg_Code << endl;list<Data>::iterator iter;for (iter = MSG_Win_List.begin(); iter != MSG_Win_List.end(); iter++) {if (Get_Msg_Data->Msg_Code == iter->Msg_Code) {(*iter).Msg_ACK = 1;if (Get_Msg_Data->Msg_Type == 3) {cout << "\n\t重传删除了一个" << endl;Win_Now_Size--;MSG_Win_List.erase(iter);}break;}}Sycn();}} while (ret != SOCKET_ERROR && ret != 0);} while (true);//关闭监听套接字closesocket(Socket);WSACleanup();}void Init_Socket() {WSADATA wd;//加载winsock2的环境if (WSAStartup(MAKEWORD(2, 2), &wd) != 0) {cout << "WSAStartup  error:" << GetLastError() << endl;return;}//创建流式套接字Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);if (Socket == INVALID_SOCKET) {cout << "socket  error:" << GetLastError() << endl;return;}//连接服务器sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(8000);addr.sin_addr.s_addr = inet_addr("127.0.0.1");int len = sizeof(sockaddr_in);if (connect(Socket, (SOCKADDR *) &addr, len) == SOCKET_ERROR) {cout << "connect  error:" << GetLastError() << endl;return;}
}void *SendMsg(void *pVoid) {do {Send_Win_Move();Sycn();system("pause");Send_Msg_Data.Msg_Code = Num;Send_Msg_Data.Msg_Type = 1;memcpy(send_buf, &Send_Msg_Data, sizeof(Data));if (Win_Now_Size == Send_WinSize) {list<Data>::iterator iter;for (iter = MSG_Win_List.begin(); iter != MSG_Win_List.end(); iter++) {if (iter->Msg_ACK == 0) {Send_Msg_Data.Msg_Code = iter->Msg_Code;Send_Msg_Data.Msg_Type = 3;memcpy(send_buf, &Send_Msg_Data, sizeof(Data));if (send(Socket, send_buf, sizeof(send_buf), 0) > 0) {cout << "\n\t<==发送重传帧:" << iter->Msg_Code << endl;} else {cout << "\n\t<==失败发送重传帧:" << iter->Msg_Code << endl;}break;}}continue;}if (getRand(1, Rand_Num) == Rand_Num)//随机丢失{cout << "\n\t<=xxxx=随机丢失帧:" << Num++ << endl;} else {if (send(Socket, send_buf, sizeof(send_buf), 0) > 0) {cout << "\n\t<==发送帧:" << Num++ << endl;} else {cout << "\n\t<<==失败发送帧:" << Num++ << endl;}}Win_Now_Size++;Send_Num--;MSG_Win_List.push_back(Send_Msg_Data);} while (Send_Num > 0);
}void Send_Win_Move() {if (MSG_Win_List.begin()->Msg_ACK == 0) return;list<Data>::iterator iter=MSG_Win_List.begin();while (iter->Msg_ACK==1){MSG_Win_List.erase(iter);Win_Now_Size--;iter=MSG_Win_List.begin();}cout << "\n\t窗口移动了" << endl;
}int getRand(int min, int max) {return (rand() % (max - min + 1)) + min;
}void Sycn() {cout << "\n\t------------------------------" << endl;cout << "\t当前发送窗口:" << Send_WinSize << "\t可用窗口大小:" << Send_WinSize - Win_Now_Size << endl;list<Data>::iterator iter;for (iter = MSG_Win_List.begin(); iter != MSG_Win_List.end(); iter++) {cout << "\t#帧序号:" << iter->Msg_Code << "\t#是否ACK:" << iter->Msg_ACK << endl;}cout << "\t------------------------------" << endl;
}

 4.导入ws2_32库到Clion :

导入ws2_32库到Clion项目-CSDN博客

 

 2024 HNUST计算机网络课程设计-(ᕑᗢᓫ∗)˒芒果酱-参考文章

(代码可以参考,૮₍ ˃ ⤙ ˂ ₎ა 但同学们要认真编写哦)
-------------------------------------------------------------------------
1、网络聊天程序的设计与实现
C++ Socket 多线程 网络聊天室 支持用户端双向交流(2023)-CSDN博客
2、Tracert 与 Ping 程序设计与实现
Tracert 与 Ping 程序设计与实现(2024)-CSDN博客
3、滑动窗口协议仿真
滑动窗口协议仿真(2024)-CSDN博客
4、OSPF 路由协议原型系统设计与实现
OSPF 路由协议原型系统设计与实现-CSDN博客
5、基于 IP 多播的网络会议程序
基于 IP 多播的网络会议程序(2024)-CSDN博客
6、编程模拟 NAT 网络地址转换
编程模拟 NAT 网络地址转换(2024)-CSDN博客
7、网络嗅探器的设计与实现
网络嗅探器的设计与实现(2024)-转载-CSDN博客
8、网络报文分析程序的设计与实现
网络报文分析程序的设计与实现(2024)-CSDN博客
9、简单 Web Server 程序的设计与实现
简单 Web Server 程序的设计与实现 (2024)-CSDN博客
10、路由器查表过程模拟

计算机网络 - 路由器查表过程模拟 C++(2024)-CSDN博客

 

相关文章:

滑动窗口协议仿真(2024)

1.题目描述 滑动窗口协议以基于分组的数据传输协议为特征&#xff0c;该协议适用于在数据链路层以及传输层中对按 顺序传送分组的可靠性要求较高的环境。在长管道传输过程&#xff08;特别是无线环境&#xff09;中&#xff0c;相应的滑动窗口 协议可实现高效的重传恢复。附录 …...

uniapp上传文件时用到的api是什么?格式是什么?

在UniApp中&#xff0c;你可以使用uni.uploadFile()方法来上传文件。这是一个异步方法&#xff0c;用于将本地资源上传到服务器。 该方法的基本格式如下&#xff1a; uni.uploadFile({url: 上传接口地址,filePath: 要上传的文件路径,name: 后端接收的文件参数名,formData: {/…...

Java面试——框架篇

1、Spring框架中的单例bean是线程安全的吗&#xff1f; 所谓单例就是所有的请求都用一个对象来处理&#xff0c;而多例则指每个请求用一个新的对象来处理。 结论&#xff1a;线程不安全。 Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。一…...

GO语言笔记1-安装与hello world

SDK开发工具包下载 Go语言官网地址&#xff1a;golang.org&#xff0c;无法访问Golang中文社区&#xff1a;首页 - Go语言中文网 - Golang中文社区下载地址&#xff1a;Go下载 - Go语言中文网 - Golang中文社区 尽量去下载稳定版本&#xff0c;根据使用系统下载压缩包格式的安装…...

指针传参误区

C语言中指针作为形参传递时&#xff0c;func&#xff08;*a, *b&#xff09; 这种形式的话&#xff0c;是无法通过简单的 ab来修改的&#xff0c;在函数体内a的地址确实被修改成b的地址了&#xff0c;但是当函数执行结束时&#xff0c;a的地址会重新回到原本的地址里面&#xf…...

力扣-42.接雨水

题目&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组[0,1,0,2…...

LeetCode-移动零(283)

题目描述&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 思路&#xff1a; 这里的思路跟以前做过的去重复数字的思路有点像&…...

文件系统与日志分析

一&#xff0c;文件系统 &#xff08;一&#xff09;inode 和block概述 1&#xff0c;文件数据包括元信息与实际数据 2&#xff0c;文件存储在硬盘上&#xff0c;硬盘最小存储单位是“扇区”&#xff0c;每个扇区存储512字节 3&#xff0c;block (块) 连续的八个扇区组成一…...

labview 与三菱FX 小型PLC通信(OPC)

NI OPC服务器与三菱FX3U PLC通讯方法 一、新建通道名称为&#xff1a;MIT 二、选择三菱FX系列 三、确认端口号相关的参数&#xff08;COM端&#xff1a;7.波特率&#xff1a;9600&#xff0c;数据位&#xff1a;7&#xff0c;校验&#xff1a;奇校验&#xff0c;停止位&#xf…...

掌握Linux网络配置:价格亲民,操作简便!

前言 在Linux系统中&#xff0c;网络配置是实现连接、通信和安全的重要一环。无论你是初学者还是有经验的用户&#xff0c;掌握网络配置命令能帮助你轻松管理网络接口、设置IP地址以及查看连接状态。以下是一些关键命令和示例&#xff0c;让你快速掌握网络操作的精髓&#xff…...

郑州大学算法设计与分析实验2

判断题 1 #include<bits/stdc.h> using namespace std;const int N 50; int f[N], n;int main() { // freopen("1.in", "r", stdin);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n;f[1] 1; f[2] 1;for(int i 3; i &l…...

【CMake】1. VSCode 开发环境安装与运行

CMake 示例工程代码 https://github.com/LABELNET/cmake-simple 插件 使用 VSCode 开发C项目&#xff0c;安装 CMake 插件 CMakeCMake ToolsCMake Language Support &#xff08;建议&#xff0c;语法提示) 1. 配置 CMake Language Support , Windows 配置 donet 环境 这…...

使用vue3+<script setup>+element-plus中el-table前端切片完成分页效果

<template><div><el-table :data"visibleData" :row-key"row > row.id"><el-table-column prop"name" label"姓名"></el-table-column><el-table-column prop"age" label"年龄&qu…...

vue 中 computed 和 watch 的区别

在Vue中&#xff0c;computed和watch都是用于监听数据的变化&#xff0c;并且根据变化做出相应的反应。 computed是一个计算属性&#xff0c;它会根据依赖的数据的变化自动计算得出一个新的值&#xff0c;并且具有缓存的特性。当依赖的数据发生变化时&#xff0c;computed属性…...

gephi——graphviz插件设置

gephi_graphviz插件设置 以下是我总结出来的一点经验 1. 安装graphviz软件&#xff0c;请见作者其他博客 2. 安装gephi 插件&#xff0c;并激活 3. 运行graphviz布局&#xff0c;会遇到找不到dot问题 问题描述&#xff1a;Graphviz process error X There was an error launc…...

wireshark抓包分析HTTP协议,HTTP协议执行流程,

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 使用WireShark工具抓取「HTTP协议」的数据包&#…...

Linux第13步_安装“vim编辑器”及应用介绍

学习“磁盘重新分区”后&#xff0c;嵌入式Linux系统环境搭建进入安装“vim编辑器”这个环节。vim编辑器可以用来修改文件&#xff0c;在后期使用中&#xff0c;会经常用到。 1、安装“vim编辑器” 输入“sudo apt-get install vim回车”&#xff0c;就可以执行安装“vim编辑…...

Yapi安装配置(CentOs)

环境要求 nodejs&#xff08;7.6) mongodb&#xff08;2.6&#xff09; git 准备工作 清除yum命令缓存 sudo yum clean all卸载低版本nodejs yum remove nodejs npm -y安装nodejs,获取资源,安装高版本nodejs curl -sL https://rpm.nodesource.com/setup_8.x | bash - #安装 s…...

HCIA-Datacom题库(自己整理分类的)_08_FTP协议【8道题】

一、单选 1.在使用FTP协议升级路由器软件时&#xff0c;传输模式应该选用___ 二进制模式 字节模式 文字模式 流字节模式 解析&#xff1a;二进制模式&#xff1a;在数据连接中传输&#xff0c;不对数据进行任何处理&#xff0c;不需要转换或格式化就可以传输字符。 2.以…...

【开源GPT项目 - 在问】让知识无界,智能触手可及

Chatanywhere: chatAnywhere 在问 | 让知识无界&#xff0c;智能触手可及 项目简介 这是一个免费的在线聊天工具&#xff0c;旨在让用户更方便地享受科技带来的便利。用户可以使用我们的工具来获取答案、寻求建议、进行翻译和计算等等。这是由一位个人开发者创建的&#xff…...

【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于Real-ESRGAN的TPU超分模型部署

2023 CCF 大数据与计算智能大赛 《基于TPU平台实现超分辨率重建模型部署》 洋洋很棒 李鹏飞 算法工程师 中国-烟台 2155477673qq.com 团队简介 本人从事工业、互联网场景传统图像算法及深度学习算法开发、部署工作。其中端侧算法开发及部署工作5年时间。 摘要 本文是…...

Vue中的组件通信方式及应用场景

在Vue中&#xff0c;组件通信有以下几种方式&#xff1a; Props / $emit&#xff1a;父组件通过给子组件传递props属性&#xff0c;子组件通过$emit事件将数据传递给父组件。适用于父组件向子组件传递数据。 自定义事件&#xff1a;父组件通过$on监听子组件触发的事件&#xf…...

RA8900CE汽车用c总线接口实时时钟模块

汽车用c总线接口实时时钟模块内置调频32.768 kHz晶体单元和DTCXO&#xff0c;高稳定性和电源切换。 接口类型我 2C-Bus接口(400kHz)界面电压范围2.5V ~ 5.5V温度补偿电压范围2.0V至5.5V计时电压范围1.6V ~ 5.5V可选时钟输出(32.768 kHz, 1024 Hz, 1 Hz)各种功能齐全的日历、报…...

屏幕截图--Snagit

Snagit是一款优秀的屏幕、文本和视频捕获、编辑与转换软件。它不仅可以捕获静止的图像&#xff0c;还能获得动态的图像和声音。软件界面干净清爽&#xff0c;功能板块一目了然&#xff0c;为用户提供专业的屏幕录制方案。可以根据自己的需求调整录制视频的分辨率、帧数、输出格…...

PHP运行环境之宝塔Web站点部署

目录 Web站点部署流程(部署聚合支付后台) 项目文件 将上传的文件解压文件至根目录 修改站点关键信息 设置伪静态,选择:thinkphp,并保存 设置PHP,选择:70+版本即可。 安装网站 1设置运行目录...

使用高版本JDK编译低版本代码

背景 SonarQube运行于Java17&#xff0c;使用Sonar的Maven插件编译时&#xff0c;如果编译使用的JDK版本低于SonarQube使用的Java17&#xff0c;则会提示Java文件不匹配问题。 Error during SonarScanner execution java.lang.UnsupportedClassVersionError: org/sonar/batch/…...

Zuul相关问题及到案(2024)

1、什么是Zuul&#xff1f;它在微服务架构中有什么作用&#xff1f; Zuul是Netflix开源的一种提供API网关服务的应用程序&#xff0c;它在微服务架构中扮演着流量的前门角色。主要功能包括以下几点&#xff1a; 路由转发&#xff1a;Zuul网关将外部请求转发到具体的微服务实例…...

【CSS】讲一讲BFC、IFC、GFC、FFC

1. 前言 FC&#xff08;Formatting Contexts&#xff09;&#xff0c;是CSS2.1的一个概念&#xff0c;是页面中的一块渲染区域&#xff0c;具有一套渲染规则&#xff0c;决定FC中子元素如何定位&#xff0c;以及和其他元素的关系和相互作用。在说FC之前说一下文档流。 1.1. 普…...

阶段十-分布式-任务调度

第一章 定时任务概述 在项目中开发定时任务应该一种比较常见的需求&#xff0c;在 Java 中开发定时任务主要有三种解决方案&#xff1a;一是使用JDK 自带的 Timer&#xff0c;二是使用 Spring Task&#xff0c;三是使用第三方组件 Quartz Timer 是 JDK 自带的定时任务工具,其…...

Godot4.2——爬虫小游戏简单制作

目录 一、项目 二、项目功能 怪物 人物 快捷键 分数 游戏说明 提示信息 三、学习视频 UI制作 游戏教程 四、总结 一、项目 视频演示&#xff1a;Godot4爬虫小游戏简单制作_哔哩哔哩bilibili 游戏教程&#xff1a;【小猫godot4入门教程 C#版 已完结】官方入门案例 第…...

黔江做网站/google框架一键安装

目录 BeEF ​BeEF-XSS的使用 获取用户Cookie 网页重定向 社工弹窗...

wordpress添加 google anlytics/微网站建站平台

都是在项目中总结的&#xff0c;经过实践的&#xff0c;在flex2 as3下使用的。as调jsExternalInterface.call("js函数名",参数&#xff1a;数组);&#xff08;可以接收返回值&#xff09;js调asas&#xff1a;ExternalInterface.addCallback("js中使用的函数名&…...

龙岗政府在线区住房建设局子网站/学生班级优化大师

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2020年低压电工多少钱及低压电工模拟考试题&#xff0c;包含低压电工多少钱答案和解析及低压电工模拟考试题练习。由安全生产模拟考试一点通公众号结合国家低压电工考试最新大纲及低压电工考试真题汇总&#xff0c;有…...

具有品牌的广州做网站/汕头网站建设

1.小学数学练习 1.1 设计题目&#xff1a;小学数学练习 1.2 问题描述&#xff1a; 编写一个帮助小学生练习数学的程序&#xff0c;帮助小学生练习 100 以内的四种数学运算&#xff1a;加、减、乘、除。 1.3 问题分析&#xff1a; a) 程序应先询问用户的 ID 号(ID 号包括两个大…...

独立网站怎样建设/农产品推广方案

weight(权重)属性详解&#xff1a; ①最简单用法&#xff1a; 如图&#xff1a; 实现代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:la…...

网站改版 html/百度seo是啥

时至北京初夏&#xff0c;一场由 TesterHome 主办的关于移动互联网测试技术的盛会即将开幕。只要你关注质量&#xff0c;热爱测试&#xff0c;期待学习&#xff0c;都欢迎你加入这次移动测试技术大会中和我们一起分享经验、探讨话题&#xff0c;结识业界朋友。 「Mobile Testi…...