瑞芯微 | 如何固定以太口地址为指定ip?

news2025/6/24 7:06:22

rxw的RK3568的evb1公板,有2个以太口,

默认UI界面只能配置eth0,无法配置eth1,

实际应用中,有时需要一旦有网线插入,就需要该地址设置为指定IP地址

本文介绍2个最简单的方法实现固定IP。

一、通过修改ipconfig.txt

安卓设备以太口的配置信息保存在以下文件中:

/data/misc/ethernet/ipconfig.txt

该文件是二进制文件,而且默认只有eth0的配置信息,一口君通过一些特殊方法,生成了包含eth0、eth1的两个网口配置的配置文件,

并且rxw原厂的ui界面可以识别该配置文件。

配置文件用16进制格式打开内容如下:

00000000 00 00 00 03 00 0C 69 70 41 73 73 69 67 6E 6D 65 ......ipAssignme
00000010 6E 74 00 06 53 54 41 54 49 43 00 0B 6C 69 6E 6B nt..STATIC..link
00000020 41 64 64 72 65 73 73 00 0D 31 39 32 2E 31 36 38 Address..192.168
00000030 2E 34 30 2E 33 34 00 00 00 18 00 07 67 61 74 65 .40.34......gate
00000040 77 61 79 00 00 00 00 00 00 00 01 00 0C 31 39 32 way..........192
00000050 2E 31 36 38 2E 34 30 2E 31 00 03 64 6E 73 00 07 .168.40.1..dns..
00000060 30 2E 30 2E 30 2E 30 00 03 64 6E 73 00 07 30 2E 0.0.0.0..dns..0.
00000070 30 2E 30 2E 30 00 0D 70 72 6F 78 79 53 65 74 74 0.0.0..proxySett
00000080 69 6E 67 73 00 04 4E 4F 4E 45 00 02 69 64 00 04 ings..NONE..id..
00000090 65 74 68 30 00 03 65 6F 73 00 0C 69 70 41 73 73 eth0..eos..ipAss
000000A0 69 67 6E 6D 65 6E 74 00 06 53 54 41 54 49 43 00 ignment..STATIC.
000000B0 0B 6C 69 6E 6B 41 64 64 72 65 73 73 00 0D 31 39 .linkAddress..19
000000C0 32 2E 31 36 38 2E 32 2E 31 32 35 00 00 00 18 00 2.168.2.125.....
000000D0 07 67 61 74 65 77 61 79 00 00 00 00 00 00 00 01 .gateway........
000000E0 00 0B 31 39 32 2E 31 36 38 2E 32 2E 31 00 03 64 ..192.168.2.1..d
000000F0 6E 73 00 07 30 2E 30 2E 30 2E 30 00 03 64 6E 73 ns..0.0.0.0..dns
00000100 00 07 30 2E 30 2E 30 2E 30 00 0D 70 72 6F 78 79 ..0.0.0.0..proxy
00000110 53 65 74 74 69 6E 67 73 00 04 4E 4F 4E 45 00 02 Settings..NONE..
00000120 69 64 00 04 65 74 68 31 00 03 65 6F 73 -- -- -- id..eth1..eos

用 ascii格式打开如下【因为是二进制文件,会有部分内容是乱码】:

    ipAssignment STATIC linkAddress 
192.168.40.34    gateway        192.168.40.1 dns 0.0.0.0 dns 0.0.0.0 
proxySettings NONE id eth0 eos ipAssignment STATIC linkAddress 
192.168.2.125    gateway        192.168.2.1 dns 0.0.0.0 dns 0.0.0.0 
proxySettings NONE id eth1 eos

总结一下,主要配置信息如下:

| 网口 |        ip        |      网关      |
|-----------------------------------------|
| eth0 |  192.168.40.34   |  192.168.40.1 |
| eth1 |  192.168.2.125   |  192.168.2.1  |

将该文件push进开发板,重启即可

adb root
adb remount
adb pull /data/misc/ethernet/ipconfig.txt

这样只要eth1对应的以太口up,就会自动设置ip地址192.168.2.125

同时并不影响UI配置eth0接口

注意:

这种方法仅在rxw3568+android11上测试通过,其他平台或者android版本没有测试。

二、通过开源项目ifplugd

除了第一种种方法还可以通过一个开源的项目ifplugd来实现。

通过ifplugd工具监听网口热插拔信息,然后执行指定脚本,将配置命令存放在脚本中即可。

ifplugd的移植需要用到libdaemon库,该库主要提供守护进程以及log接口功能。

1. 移植步骤

1)准备文件:
libdaemon-0.14.tar.gz
ifplugd-0.14.tar.gz

后台回复:eth,既可以获取

没有采用最新的libdaemon、ifplugd,会有版本兼容问题

本实例基于ndk编译器编译,

为了方便起见,我把libdaemon、ifplugd源文件全部拷贝到ndk实例工程下,libdaemon的头文件,拷贝了2次,

方便c文件包含。

.....src-ifplugd$ tree ./
./
├── Application.mk
├── daemon.h
├── dexec.c
├── dexec.h
├── dfork.c
├── dfork.h
├── dlog.c
├── dlog.h
├── dnonblock.c
├── dnonblock.h
├── dpid.c
├── dpid.h
├── dsignal.c
├── dsignal.h
├── ethtool-kernel.h
├── ethtool-local.h
├── ifplugd.c
├── ifstatus.c
├── include
├── interface.c
├── interface.h
├── libdaemon
│   ├── daemon.h
│   ├── dexec.h
│   ├── dfork.h
│   ├── dlog.h
│   ├── dnonblock.h
│   ├── dpid.h
│   └── dsignal.h
├── svn-revision.h
└── YROS.mk

2 directories, 29 files

2)修改配置文件

编译描述信息位于文件YROS.mk中,

【读者根据自己工程,文件会有所不同】

YROS.mk修改如下:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
	ifplugd.c  interface.cdexec.c dfork.c dlog.c dnonblock.c  dpid.c dsignal.c   
	

LOCAL_SHARED_LIBRARIES := \

LOCAL_MODULE_TAGS := optional
LOCAL_CLANG := true

LOCAL_MODULE:= ethcheckd

include $(BUILD_EXECUTABLE)
3)编译
  1. 编译错误1
λ build.bat                                                                                                                         
                                                                                                                                    
ndk-build.cmd                                                                                                                       
[armeabi-v7a] Compile thumb  : ifplugd <= ifplugd.c                                                                                 
src/ifplugd.c:66:13: error: use of undeclared identifier 'SYSCONFDIR'                                                               
char *run = SYSCONFDIR"/ifplugd/ifplugd.action";                                                                                    
            ^                                                                                                                       
src/ifplugd.c:66:23: error: expected ';' after top level declarator                                                                 
char *run = SYSCONFDIR"/ifplugd/ifplugd.action";                                                                                    
                      ^                                                                                                             
                      ;                                                                                                             
src/ifplugd.c:155:18: warning: multiple unsequenced modifications to 'sigfd' [-Wunsequenced]                                        
    FD_SET(sigfd = daemon_signal_fd(), &rfds);                                                                                      
                 ^                                                                                                                  
H:/yros-ndk-windows/build//../sysroot/usr/include\sys/select.h:75:50: note: expanded from macro 'FD_SET'                            
#define FD_SET(fd, set) (__FDS_BITS(set)[__FDELT(fd)] |= __FDMASK(fd))                                                              
                                                 ^                ~~                                                                
H:/yros-ndk-windows/build//../sysroot/usr/include\sys/select.h:48:23: note: expanded from macro '__FDELT'                           
#define __FDELT(fd) ((fd) / NFDBITS)                                                                                                
                      ^                                                                                                             
src/ifplugd.c:374:36: error: expected ')'                                                                                           
    daemon_log(LOG_INFO, "ifplugd "VERSION" successfully initialized, link beat %sdetected.", status == IFSTATUS_UP ? "" : "not "); 
                                   ^                                                                                                
src/ifplugd.c:374:15: note: to match this '('                                                                                       
    daemon_log(LOG_INFO, "ifplugd "VERSION" successfully initialized, link beat %sdetected.", status == IFSTATUS_UP ? "" : "not "); 
              ^                                                                                                                     
src/ifplugd.c:388:18: warning: multiple unsequenced modifications to 'sigfd' [-Wunsequenced]                                        
    FD_SET(sigfd = daemon_signal_fd(), &rfds);                                                                                      
                 ^                                                                                                                  
H:/yros-ndk-windows/build//../sysroot/usr/include\sys/select.h:75:50: note: expanded from macro 'FD_SET'                            
#define FD_SET(fd, set) (__FDS_BITS(set)[__FDELT(fd)] |= __FDMASK(fd))                                                              
                                                 ^                ~~                                                                
H:/yros-ndk-windows/build//../sysroot/usr/include\sys/select.h:48:23: note: expanded from macro '__FDELT'                           
#define __FDELT(fd) ((fd) / NFDBITS)                                                                                                
                      ^                                                                                                             
src/ifplugd.c:704:26: error: expected ')'                                                                                           
        printf("ifplugd "VERSION" (SVN: "SVN_REVISION")\n");                                                                        
                         ^                                                                                                          
src/ifplugd.c:704:15: note: to match this '('                                                                                       
        printf("ifplugd "VERSION" (SVN: "SVN_REVISION")\n");                                                                        
              ^                                                                                                                     
2 warnings and 4 errors generated.                                                                                                  
make: *** [obj/local/armeabi-v7a/objs/ifplugd/ifplugd.o] Error 1                                                                    

请添加图片描述

修改文件ifplugd.c

59  #define VARRUN "/system"
63  #define SYSCONFDIR ""
64  #define VERSION "yikoulinux"
  1. 编译错误2
λ build.bat

ndk-build.cmd
[armeabi-v7a] Compile thumb  : ifplugd <= dexec.c
[armeabi-v7a] Compile thumb  : ifplugd <= dfork.c
[armeabi-v7a] Compile thumb  : ifplugd <= dlog.c
[armeabi-v7a] Compile thumb  : ifplugd <= dnonblock.c
[armeabi-v7a] Compile thumb  : ifplugd <= dpid.c
src/dpid.c:63:43: error: use of undeclared identifier 'LOCALSTATEDIR'
    snprintf(fn, sizeof(fn), "%s/%s.pid", VARRUN, daemon_pid_file_ident ? daemon_pid_file_ident : "unknown");
                                          ^
src/dpid.c:51:16: note: expanded from macro 'VARRUN'
#define VARRUN LOCALSTATEDIR "/run"
               ^
1 error generated.
make: *** [obj/local/armeabi-v7a/objs/ifplugd/dpid.o] Error 1

修改文件dpid.c

50 #define LOCALSTATEDIR
4) 编译成功

编译成功log如下:

H:\compileforandroid                                                                                                     
λ build.bat                                                                                                              
                                                                                                                         
ndk-build.cmd                                                                                                            
[armeabi-v7a] Compile thumb  : ifplugd <= ifplugd.c                                                                      
src/ifplugd.c:148:53: warning: missing sentinel in function call [-Wsentinel]                                            
        execl(run, run, interface, arg, extra_arg, 0);                                                                   
                                                    ^                                                                    
                                                    , NULL                                                               
H:/yros-ndk-windows/build//../sysroot/usr/include\unistd.h:105:5: note: function has been explicitly marked sentinel here
int execl(const char* __path, const char* __arg0, ...) __attribute__((__sentinel__));                                    
    ^                                                                                                                    
src/ifplugd.c:157:18: warning: multiple unsequenced modifications to 'sigfd' [-Wunsequenced]                             
    FD_SET(sigfd = daemon_signal_fd(), &rfds);                                                                           
                 ^                                                                                                       
H:/yros-ndk-windows/build//../sysroot/usr/include\sys/select.h:75:50: note: expanded from macro 'FD_SET'                 
#define FD_SET(fd, set) (__FDS_BITS(set)[__FDELT(fd)] |= __FDMASK(fd))                                                   
                                                 ^                ~~                                                     
H:/yros-ndk-windows/build//../sysroot/usr/include\sys/select.h:48:23: note: expanded from macro '__FDELT'                
#define __FDELT(fd) ((fd) / NFDBITS)                                                                                     
                      ^                                                                                                  
src/ifplugd.c:390:18: warning: multiple unsequenced modifications to 'sigfd' [-Wunsequenced]                             
    FD_SET(sigfd = daemon_signal_fd(), &rfds);                                                                           
                 ^                                                                                                       
H:/yros-ndk-windows/build//../sysroot/usr/include\sys/select.h:75:50: note: expanded from macro 'FD_SET'                 
#define FD_SET(fd, set) (__FDS_BITS(set)[__FDELT(fd)] |= __FDMASK(fd))                                                   
                                                 ^                ~~                                                     
H:/yros-ndk-windows/build//../sysroot/usr/include\sys/select.h:48:23: note: expanded from macro '__FDELT'                
#define __FDELT(fd) ((fd) / NFDBITS)                                                                                     
                      ^                                                                                                  
3 warnings generated.                                                                                                    
[armeabi-v7a] Compile thumb  : ifplugd <= interface.c                                                                    
[armeabi-v7a] Compile thumb  : ifplugd <= dexec.c                                                                        
[armeabi-v7a] Compile thumb  : ifplugd <= dfork.c                                                                        
[armeabi-v7a] Compile thumb  : ifplugd <= dlog.c                                                                         
[armeabi-v7a] Compile thumb  : ifplugd <= dnonblock.c                                                                    
[armeabi-v7a] Compile thumb  : ifplugd <= dpid.c                                                                         
[armeabi-v7a] Compile thumb  : ifplugd <= dsignal.c                                                                      
[armeabi-v7a] Executable     : ifplugd                                                                                   
[armeabi-v7a] Install        : ifplugd => libs/armeabi-v7a/ifplugd                                                       

在这里插入图片描述

程序位置如下:

libs\armeabi-v7a\ifplugd

测试

1. 查看ifplugd参数
ifplugd -h
rk3568_r:/ # ifplugd -h
ifplugd [options]
   -a --no-auto              Do not enable interface automatically (off)
   -n --no-daemon            Do not daemonize (for debugging) (off)
   -s --no-syslog            Do not use syslog, use stderr instead (for debugging) (off)
   -b --no-beep              Do not beep (off)
   -f --ignore-fail          Ignore detection failure, retry instead (failure is treated as DOWN) (off)
   -F --ignore-fail-positive Ignore detection failure, retry instead (failure is treated as UP) (off)
   -i --iface=IFACE          Specify ethernet interface (eth0)
   -r --run=EXEC             Specify program to execute (/ifplugd/ifplugd.action)
   -I --ignore-retval        Don't exit on nonzero return value of program executed (off)
   -t --poll-time=SECS       Specify poll time in seconds (1)
   -u --delay-up=SECS        Specify delay for configuring interface (0)
   -d --delay-down=SECS      Specify delay for deconfiguring interface (5)
   -m --api-mode=MODE        Force API mode (mii, priv, ethtool, wlan, auto) (auto)
   -q --no-shutdown          Don't run script on daemon quit (off)
   -w --wait-on-fork         Wait until daemon fork finished (off)
   -x --extra-arg            Specify an extra argument for action script
   -h --help                 Show this help
   -k --kill                 Kill a running daemon
   -c --check-running        Check if a daemon is currently running
   -v --version              Show version
   -S --suspend              Suspend running daemon
   -R --resume               Resume running daemon
   -z --info                 Write status of running daemon to syslog
2. 增加脚本if.sh

当网口eth1 up后,ifplugd会执行如下命令【下面动作由ifplugd自动执行】:

/system/if.sh eth1 up

根据参数顺序,编写脚本if.sh如下:

#!/bin/bash

IPADDR=192.168.40.8
ETHPORT=eth1
echo "daniel peng set" $ETHPORT $IPADDR
echo $#
echo $0
echo $1
echo $2
if [ $# -eq 2 ];then
	if [ $1 = $ETHPORT ];then 
	echo $ETHPORT
	if [ $2 = "up" ];then
	ifconfig $ETHPORT $IPADDR
	sleep 1
	ip rule add from all lookup main pref 9000 
	sleep 1
	echo 1 > /proc/sys/net/ipv4/ip_forward 
	iptables -F
	echo "set" $ETHPORT "done"
	elif [ $2 = "down" ];then
	echo "down"
	elif [ $2 = "disable" ];then
	echo "disable"
	elif [ $2 = "error" ];then
	echo "error"
	fi
	fi
fi

功能:

网口eth1 up后,设置该网口地址为IPADDR,即:192.168.40.8

读者可以根据自己的需要编写相应的脚本。

3. 运行ifplugd

ifplugd监听网口eth1并且执行后面的脚本文件

在板子上输入以下命令:

ifplugd -i eth1 -r "sh /system/if.sh"

查看该守护进程:

H:\compileforandroid
λ adb shell
rk3568_r:/ # ifplugd -i eth1 -r "sh /system/if.sh"
rk3568_r:/ # ps -ef | grep if
wifi            280      1 0 09:58:52 ?     00:00:00 android.hardware.wifi@1.0-service
wifi            385      1 0 09:58:53 ?     00:00:00 wificond
root           1826      1 0 10:18:06 ?     00:00:00 ifplugd -i eth1 -r sh /system/if.sh
root           1834   1819 2 10:18:17 pts/0 00:00:00 grep if

一旦网口插入网线后,地址就会被自动设置。

要实现开机就自动运行ifplugd,可以参考下面文章

《安卓如何设置开机自动启动某个程序?ramdisk + init.rc给你搞定》

补充

ifplugd的确可以实现监测网卡的状态,并执行相应脚本,

但是有个前提,就是网口已经注册到系统中,即用ifconfig -a能查看到

如何是usb网口这种设备,在插入usb口之后网口设备才会注册,

那么这种情况下,要想设置usb网卡,那么就就需要修改ifplugd程序。

下文,给大家讲解如何自己实现一个简单的网口检测并设置ip的小程序

完整代码,点赞留言,后台回复:eth

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

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

相关文章

电脑提示kernel32.dll的错误提示窗口怎么办,解决kernel32.dll丢的办法

当你在使用电脑时&#xff0c;突然收到kernel32.dll丢失或找不到的错误提示窗口&#xff0c;这个时候先不要让自己的心态爆炸&#xff0c;解决的办法会有很多种&#xff0c;其实问题都不大&#xff0c;就能够很好的解决文件缺失的问题。接下来就把方法推进给大家。 一.解决kern…

Docker逃逸---CVE-2020-15257浅析

一、产生原因 在版本1.3.9之前和1.4.0~1.4.2的Containerd中&#xff0c;由于在网络模式为host的情况下&#xff0c;容器与宿主机共享一套Network namespace &#xff0c;此时containerd-shim API暴露给了用户&#xff0c;而且访问控制仅仅验证了连接进程的有效UID为0&#xff…

网站列表页加密:三次请求后返回内容多\r

一、抓包第一次请求 url aHR0cDovL2N5eHcuY24vQ29sdW1uLmFzcHg/Y29saWQ9MTA抓包&#xff0c;需要清理浏览器cookie&#xff0c;或者无痕模式打开网址&#xff0c;否则返回的包不全&#xff0c;依照下图中的第一个包进行requests请求 第一次请求后返回 <!DOCTYPE html>…

每年高考时间是几月几号 高考开始时间

高考是高中生最重要的一个阶段&#xff0c;甚至影响着很多学生的未来&#xff0c;相信大家都很关注高考的具体时间是什么时候&#xff0c;本次将详细给您介绍高考的具体开始时间以及结束时间。 每年高考的时间都是6月7日开始&#xff0c;一共持续三天时间左右&#xff0c;但是…

Java面试题-0919

集合篇 Java面试题-集合篇HashMap底层实现原理概述javaSE进阶-哈希表 为了满足hashmap集合的不重复存储&#xff0c;为什么要重写hashcode和equals方法&#xff1f; 首先理解一下hashmap的插入元素的前提&#xff1a; hashmap会根据元素的hashcode取模进行比较&#xff0c;当…

HDLbits: Lemmings3

Lemmings又多了一种状态&#xff1a;dig&#xff0c;我按照上一篇文章里大神的思路又多加了两种状态&#xff1a;LEFT_DIGGING与RIGHT_DIGGING&#xff0c;写出了如下的代码&#xff1a; module top_module(input clk,input areset, // Freshly brainwashed Lemmings walk …

css中filter属性设置后导致页面定位失效

问题&#xff1a;app上设置css的filter属性导致定位失效。 原因&#xff1a;当在标签中使用了 filter 属性后&#xff08;body { filter: grayscale(1); &#xff09;&#xff0c; filter 就会生成一个新的包含块&#xff0c;其位置大小和所在标签一样&#xff0c;然后 fixed …

Java BIO模型分析(提供单线程和多线程服务端代码示例)

目录 一、BIO特点介绍二、BIO代码实现2.1、客户端代码准备2.2、服务端单线程处理2.2.1、服务端代码2.2.2、阻塞代码分析2.2.3、存在问题 2.3、服务端多线程处理2.3.1、服务端代码2.3.2、存在问题 一、BIO特点介绍 BIO(blocking I/O)&#xff1a;同步阻塞IO&#xff0c;在每个I…

day62:ARMday9,I2c总线通信

作业&#xff1a;按键中断实现LED1、蜂鸣器、风扇 key_in.c: #include "key_in.h"void gpio_init() {//RCC使能//GPIOERCC->MP_AHB4ENSETR | (0x1<<4);//GPIOBRCC->MP_AHB4ENSETR | (0x1<<1);//PE10、PB6、PE9输出模式GPIOE->MODER & ~(0…

经典面试题第八更---reduce的使用

前言&#xff1a; &#x1f921; 作者简介&#xff1a;我是Morning&#xff0c;计算机的打工人&#xff0c;想要翻身做主人 &#x1f648; &#x1f648; &#x1f648; &#x1f3e0; 个人主页&#xff1a; Morning的主页 &#x1f4d5;系列专栏&#xff1a;前端面…

ARM day9

src/key_it.c #include "key_it.h" #include "led.h" void key_it_config() {//RCC使能GPIOF时钟RCC->MP_AHB4ENSETR | (0x1<<5);//设置PF9 PF7 PF8GPIO输入//PF9GPIOF->MODER & (~(0x3<<18));//PF8GPIOF->MODER & (~(0x3&l…

Unity - Normal mapping - Reoriented normal mapping - 重定向法线、混合法线

文章目录 目的核心代码PBR - Filament - Normal mappingShader效果BlendNormal_Hill12BlendNormal_UDNBlendNormals_Unity_Native - 效果目前最好 ProjectReferences 目的 备份、拾遗 核心代码 half3 blended_normal normalize(half3(n1.xy n2.xy, n1.z*n2.z));PBR - Filam…

不是钉钉管理员如何批量复制公司全部人员名单到execl表格里

环境&#xff1a; Win10 专业版 钉钉V7.10.0 问题描述&#xff1a; 不是钉钉管理员,如何批量复制公司全员群里面全面人员名单 公司人员有388多个 解决方案&#xff1a; 1.打开公司全员群&#xff0c;右上角点开设置&#xff0c;点查看全部群成员 2.右侧成员一次复制几个&…

Vue-2.7自定义指令

自定义指令 自己定义的指令&#xff0c;可以封装一些dom操作&#xff0c;扩展额外功能 例如需求&#xff1a;当页面加载时&#xff0c;让元素将获得焦点&#xff08;autofucus在safari浏览器有兼容性&#xff09; 操作dom&#xff1a;dom元素.focus() 太麻烦&#xff01;…

datax同步数据简介

概述 业务中经常会用到数据全量同步和增量同步&#xff0c;用sqlDump只能全量同步&#xff0c;而且数据量大的时候很慢。 阿里的datax目前是一款不错的同步工具 环境要求&#xff1a; jdk:1.8 python:2.7 maven:3.0 3.0的python跑不起来 ps:开源版的datax的mysql驱动还是用…

“零代码”能源管理平台:智能管理能源数据

随着能源的快速增长&#xff0c;有效管理和监控能源数据变得越来越重要。为了帮助企业更好的管理能源以及降低能源成本&#xff0c;越来越多的能源管理平台出现在市面上。 “零代码”形式的能源管理平台&#xff0c;采用IT与OT深度融合为理念&#xff0c;可进行可视化、拖拽、…

【C语言】每日一题(半月斩)——day4

目录 选择题 1、设变量已正确定义&#xff0c;以下不能统计出一行中输入字符个数&#xff08;不包含回车符&#xff09;的程序段是&#xff08; &#xff09; 2、运行以下程序后&#xff0c;如果从键盘上输入 65 14<回车> &#xff0c;则输出结果为&#xff08; &…

RabbitMQ消息中间件概述

1.什么是RabbitMQ RabbitMQ是一个由erlang开发的AMQP&#xff08;Advanced Message Queue &#xff09;的开源实现。AMQP 的出现其实也是应了广大人民群众的需求&#xff0c;虽然在同步消息通讯的世界里有很多公开标准&#xff08;如 COBAR的 IIOP &#xff0c;或者是 SOAP 等&…

皕杰报表中填报控件显示模式控制问题

填报报表是指能够向数据库上传数据的报表&#xff0c;皕杰报表填报单元格支持多种控件类型&#xff0c;包括文本框、文本域、下拉框、下拉树、单选框、复选框、时间、日期、日期时间… 这些控件类型在web页面上的显示模式在皕杰报表里设置了三种模式&#xff0c;只读、显式显示…

游戏反虚拟机检测方案

近年来&#xff0c;游戏市场高速发展&#xff0c;随之而来的还有图谋利益的游戏黑产。在利益吸引下&#xff0c;游戏黑产扩张迅猛&#xff0c;攻击趋势呈现出角度多样化的特点。 在这一趋势下&#xff0c;游戏安全防护的检测覆盖率显得尤为重要。如果游戏在某一环节出现被绕过…