• 用android studio写了个app下载到了真机中,已实现了app与pc端的网络调试助手的WIFI通信,怎么实现4G通信 我想实现手机端的app和pc端通过4G网络的指令通信,这个可以实现吗,是需要改程序还是需要用到什么公共...
  • 1、配置内核支持(Linux-2.6.21)  (1)在设备驱动的网络配置里选择上ppp的支持,因为后面使用到的拨号软件pppd要用到此驱动,如果不配置会报没有此驱动的错误  /dev/ppp驱动,这里选择型号,直接编译进内核 ...

    1、配置内核支持(Linux-2.6.21)

     (1)在设备驱动的网络配置里选择上ppp的支持,因为后面使用到的拨号软件pppd要用到此驱动,如果不配置会报没有此驱动的错误

         /dev/ppp驱动,这里选择型号,直接编译进内核

    Device Drivers  ---> Network device support  --->

       

    (2)选择上usb转串口驱动,主要有两处,同样选择直接编译进内核

       Device Drivers  ---> USB support  ---> USB Serial Converter support---->USB Serial Converter support

       



    同时,需要在kernel/driver/usb/serial/option.c中加入你的上网卡的型号,可以在主机上用lsusb命令查看,也可以在cat /proc/bus/usb/devices中查看,E1750---->0x12D1:0x1446

    配置完毕,编译内核,下载到板子上,板子依然是将该上网卡认做U盘,查看cat /proc/bus/usb/devices里的driver仍然是usb storage,并没有自动转换成ttyUSB,网上说这一步完成后,应该是可以支持自动转换了,但是我们的Linux却没有,不知何故?于是加入了usb_modeswitch

    2 、usb_modeswitch的配置与使用

     (1)交叉编译libusb库(貌似版本依赖问题很严重,选了好几个版本,libusb-0.1.12.tar.gz)

        ./configure --host=arm-linux

                            --prefix=/edy/3G

        make

        make install

         将会在/edy/3G下生成3个目录:include (里面是下一步操作需要的头文件)  lib(里面是下一步操作需要的库)bin

      (2) 交叉编译usb_modeswitch (usb_modeswitch-1.1.9)

      修改Makefile

        CC= arm-linux-gcc

        CFLAGS += -Wall   -I /edy/3G/include   -L /edy/3G/lib  -lusb

          make all

      生成了usb_modeswitch可执行程序

           还要修改配置文件usb_modeswitch.conf,需要用到usb_modeswitch-data-20110805.tar.bz2
          在usb_modeswitch-data目录下,有一个usb_modeswitch.d目录,在下面找到你的3G上网卡所对应的型号,我的是12d1:1446

      cat 12d1:1446 >> usb_modeswitch/usb_modeswitch.conf

      (3) 将usb_modeswitch应用程序移动到开发板的/usr/sbin下,将usb_modeswitch.conf移动到开发板的/etc下

      将libusb库移动到开发板的/lib下,要注意最好在主机上对libusb压缩,tar -cvf libusb.tar ,然后在开发板上解压缩,

           cd /lib/usblib

           cp -ard *  /lib下面(一定要防止符号链接丢失,要加-d选项)

    3 、拨号软件ppp的移植(ppp-2.4.5.tar.gz)

      将生成的pppd 和chat移动到板子的/usr/sbin下,将mini6410写的拨号脚本/etc/ppp目录复制到板子的/etc目录下

     

    4、在板子上操作

       插上上网卡,运行usb_modeswitch,就可以在/dev目录下生成ttyUSB0 ttyUSB1 ttyUSB2等驱动了,你可以查看

      cat /proc/bus/usb/devices 下,看dirver标签,已经是还有两个ttyUSB没生成。。。。。。。。。

     此时运行拨号软件pppd call wcdma,就能够发指令了

    待续。。。。。。。。。。。

    展开全文
  • 在网络编程中,有时候会需要重新拨号建立网络连接(如Ad点击软件通过重新拨号形成...实际使用是可将下面代码保存为一个批处理文件,然后直接运行或在程序里进行调用。rasdial.exe /disconnect 断开连接del "C:/Documents

    在网络编程中,有时候会需要重新拨号建立网络连接(Ad点击软件通过重新拨号形成有效点击) ,下面介绍两种程序中拨号的方法.

    1
    、最简单的方法:使用RasDial命令
        RasDial
    Windows自带的命令,使用非常简单。实际使用是可将下面代码保存为一个批处理文件,然后直接运行或在程序里进行调用。

    rasdial.exe  /disconnect '断开连接
    del "C:/Documents and Settings/hyuqin/Cookies/*.*" /Q  '
    清除Cookie
    rasdial.exe  
    连接名 连接账户 连接密码 '重新拨号


    2
    、封装为类,灵活调用
       
    上面提到的方法虽然很简单,但并非标准的实现方法,使用时会受到一些限制,此时最好的办法就是将实现代码封装为类库。下面这个类库是网上一位朋友提供的,直接调用就行.

    using System;
    using System.Runtime.InteropServices;

    public struct RASCONN
    {
        
    public int dwSize;
        
    public IntPtr hrasconn;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)]
        
    public string szEntryName;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)]
        
    public string szDeviceType;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 129)]
        
    public string szDeviceName;
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public struct RasStats
    {
        
    public int dwSize;
        
    public int dwBytesXmited;
        
    public int dwBytesRcved;
        
    public int dwFramesXmited;
        
    public int dwFramesRcved;
        
    public int dwCrcErr;
        
    public int dwTimeoutErr;
        
    public int dwAlignmentErr;
        
    public int dwHardwareOverrunErr;
        
    public int dwFramingErr;
        
    public int dwBufferOverrunErr;
        
    public int dwCompressionRatioIn;
        
    public int dwCompressionRatioOut;
        
    public int dwBps;
        
    public int dwConnectionDuration;
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    public struct RasEntryName
    {
        
    public int dwSize;
        
    //[MarshalAs(UnmanagedType.ByValTStr,SizeConst=(int)RasFieldSizeConstants.RAS_MaxEntryName + 1)]
        
    public string szEntryName;
        
    //#if WINVER5
        
    //  public int dwFlags;
        
    //  [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260+1)]
        
    //  public string szPhonebookPath;
        
    //#endif
    }
    public class RAS
    {
        [DllImport(
    "Rasapi32.dll", EntryPoint = "RasEnumConnectionsA",
             SetLastError =
    true)]

        
    internal static extern int RasEnumConnections
            (
            
    ref RASCONN lprasconn, // buffer to receive connections data
            
    ref int lpcb, // size in bytes of buffer
            
    ref int lpcConnections // number of connections written to buffer
            );


        [DllImport(
    "rasapi32.dll", CharSet = CharSet.Auto)]
        
    internal static extern uint RasGetConnectionStatistics(
            IntPtr hRasConn,      
    // handle to the connection
            [In, Out]RasStats lpStatistics  
    // buffer to receive statistics
            );
        [DllImport(
    "rasapi32.dll", CharSet = CharSet.Auto)]
        
    public extern static uint RasHangUp(
            IntPtr hrasconn  
    // handle to the RAS connection to hang up
            );

        [DllImport(
    "rasapi32.dll", CharSet = CharSet.Auto)]
        
    public extern static uint RasEnumEntries(
            
    string reserved,              // reserved, must be NULL
            
    string lpszPhonebook,         // pointer to full path and
            
    //  file name of phone-book file
            [In, Out]RasEntryName[] lprasentryname,
    // buffer to receive
            
    //  phone-book entries
            
    ref int lpcb,                  // size in bytes of buffer
            
    out int lpcEntries             // number of entries written
            
    //  to buffer
            );

        [DllImport(
    "wininet.dll", CharSet = CharSet.Auto)]
        
    public extern static int InternetDial(
            IntPtr hwnd,
            [In]
    string lpszConnectoid,
            
    uint dwFlags,
            
    ref int lpdwConnection,
            
    uint dwReserved
            );

        
    public RAS()
        {
        }
    }
    public enum DEL_CACHE_TYPE //要删除的类型。
    {
        File,
    //表示internet临时文件
        Cookie
    //表示Cookie
    }

    public class RASDisplay
    {
        [DllImport(
    "wininet.dll", CharSet = CharSet.Auto)]
        
    public static extern bool DeleteUrlCacheEntry(
            DEL_CACHE_TYPE type
            );
        
    private string m_duration;
        
    private string m_ConnectionName;
        
    private string[] m_ConnectionNames;
        
    private double m_TX;
        
    private double m_RX;
        
    private bool m_connected;
        
    private IntPtr m_ConnectedRasHandle;

        RasStats status =
    new RasStats();
        
    public RASDisplay()
        {
            m_connected =
    true;

            RAS lpras =
    new RAS();
            RASCONN lprasConn =
    new RASCONN();

            lprasConn.dwSize = Marshal.SizeOf(
    typeof(RASCONN));
            lprasConn.hrasconn = IntPtr.Zero;

            
    int lpcb = 0;
            
    int lpcConnections = 0;
            
    int nRet = 0;
            lpcb = Marshal.SizeOf(
    typeof(RASCONN));

            nRet = RAS.RasEnumConnections(
    ref lprasConn, ref lpcb, ref
                lpcConnections);

            
    if (nRet != 0)
            {
                m_connected =
    false;
                
    return;

            }

            
    if (lpcConnections > 0)
            {
                
    //for (int i = 0; i < lpcConnections; i++)

                
    //{
                RasStats stats =
    new RasStats();

                m_ConnectedRasHandle = lprasConn.hrasconn;
                RAS.RasGetConnectionStatistics(lprasConn.hrasconn, stats);


                m_ConnectionName = lprasConn.szEntryName;

                
    int Hours = 0;
                
    int Minutes = 0;
                
    int Seconds = 0;

                Hours = ((stats.dwConnectionDuration / 1000) / 3600);
                Minutes = ((stats.dwConnectionDuration / 1000) / 60) - (Hours * 60);
                Seconds = ((stats.dwConnectionDuration / 1000)) - (Minutes * 60) - (Hours * 3600);


                m_duration = Hours +
    " hours " + Minutes + " minutes " + Seconds + " secs";
                m_TX = stats.dwBytesXmited;
                m_RX = stats.dwBytesRcved;
                
    //}
            }
            
    else
            {
                m_connected =
    false;
            }


            
    int lpNames = 1;
            
    int entryNameSize = 0;
            
    int lpSize = 0;
            RasEntryName[] names =
    null;

            entryNameSize = Marshal.SizeOf(
    typeof(RasEntryName));
            lpSize = lpNames * entryNameSize;

            names =
    new RasEntryName[lpNames];
            names[0].dwSize = entryNameSize;

            
    uint retval = RAS.RasEnumEntries(null, null, names, ref lpSize, out lpNames);

            
    //if we have more than one connection, we need to do it again
            
    if (lpNames > 1)
            {
                names =
    new RasEntryName[lpNames];
                
    for (int i = 0; i < names.Length; i++)
                {
                    names[i].dwSize = entryNameSize;
                }

                retval = RAS.RasEnumEntries(
    null, null, names, ref lpSize, out lpNames);

            }
            m_ConnectionNames =
    new string[names.Length];


            
    if (lpNames > 0)
            {
                
    for (int i = 0; i < names.Length; i++)
                {
                    m_ConnectionNames[i] = names[i].szEntryName;
                }
            }
        }

        
    public string Duration
        {
            get
            {
                
    return m_connected ? m_duration : "";
            }
        }

        
    public string[] Connections
        {
            get
            {
                
    return m_ConnectionNames;
            }
        }

        
    public double BytesTransmitted
        {
            get
            {
                
    return m_connected ? m_TX : 0;
            }
        }
        
    public double BytesReceived
        {
            get
            {
                
    return m_connected ? m_RX : 0;

            }
        }
        
    public string ConnectionName
        {
            get
            {
                
    return m_connected ? m_ConnectionName : "";
            }
        }
        
    public bool IsConnected
        {
            get
            {
                
    return m_connected;
            }
        }

        
    public int Connect(string Connection)
        {
            
    int temp = 0;
            
    uint INTERNET_AUTO_DIAL_UNATTENDED = 2;
            
    int retVal = RAS.InternetDial(IntPtr.Zero, Connection, INTERNET_AUTO_DIAL_UNATTENDED, ref temp, 0);
            
    return retVal;
        }
        
    public void Disconnect()
        {
            RAS.RasHangUp(m_ConnectedRasHandle);
        }
    }


    调用方法:

    RASDisplay ras = new RASDisplay();
    ras.Disconnect();
    //断开连接
    ras.Connect(
    "ADSL");//重新拨号

    展开全文
  • C#中判断网络连接的状态  有时我们要不停的判断网络的连接状态,比如服务器网络连接是否正常等,下面就简单介绍我的判断方法,各位有更好的方法欢迎分享。 代码就不解释了,一看就明白了。 using ...
    C#中判断网络连接的状态 
    有时我们要不停的判断网络的连接状态,比如服务器网络连接是否正常等,下面就简单介绍我的判断方法,各位有更好的方法欢迎分享。


    代码就不解释了,一看就明白了。




    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net.NetworkInformation;


    namespace ConsoleApplication1
    {
        class Program
        {
            public static void Main(string[] args)
            {
                string url = "www.baidu.com;www.sina.com;www.cnblogs.com;www.google.com;www.163.com;www.csdn.com";
                string[] urls = url.Split(new char[] { ';' });
                CheckServeStatus(urls);


                Console.ReadKey();
            }
            
            /// <summary>
            /// 检测网络连接状态
            /// </summary>
            /// <param name="urls"></param>
            public static void CheckServeStatus(string[] urls)
            {
                int errCount = 0;//ping时连接失败个数


                if (!LocalConnectionStatus())
                {
                    Console.WriteLine("网络异常~无连接");
                }
                else if (!MyPing(urls, out errCount))
                {
                    if ((double)errCount / urls.Length >= 0.3)
                    {
                        Console.WriteLine("网络异常~连接多次无响应");
                    }
                    else
                    {
                        Console.WriteLine("网络不稳定");
                    }
                }
                else
                {
                    Console.WriteLine("网络正常");
                }
            }


            #region 网络检测


             private const int INTERNET_CONNECTION_MODEM = 1;
            private const int INTERNET_CONNECTION_LAN = 2;


            [System.Runtime.InteropServices.DllImport("winInet.dll")]
            private static extern bool InternetGetConnectedState(ref int dwFlag, int dwReserved);


            /// <summary>
            /// 判断本地的连接状态
             /// </summary>
            /// <returns></returns>
            private static bool LocalConnectionStatus()
            {
                System.Int32 dwFlag = new Int32();
                if (!InternetGetConnectedState(ref dwFlag, 0))
                {
                    Console.WriteLine("LocalConnectionStatus--未连网!");
                    return false;
                }
                else
                {
                    if ((dwFlag & INTERNET_CONNECTION_MODEM) != 0)
                    {
                        Console.WriteLine("LocalConnectionStatus--采用调制解调器上网。");
                        return true;
                    }
                    else if ((dwFlag & INTERNET_CONNECTION_LAN) != 0)
                    {
                        Console.WriteLine("LocalConnectionStatus--采用网卡上网。");
                        return true;
                    }
                }
                return false;
            }


            /// <summary>
            /// Ping命令检测网络是否畅通
            /// </summary>
            /// <param name="urls">URL数据</param>
            /// <param name="errorCount">ping时连接失败个数</param>
            /// <returns></returns>
            public static bool MyPing(string[] urls, out int errorCount)
            {
                bool isconn = true;
                Ping ping = new Ping();
                errorCount = 0;
                try
                {
                    PingReply pr;
                    for (int i = 0; i < urls.Length; i++)
                    {
                        pr = ping.Send(urls[i]);
                        if (pr.Status != IPStatus.Success)
                        {
                            isconn = false;
                            errorCount++;
                        }
                        Console.WriteLine("Ping " + urls[i] + "    " + pr.Status.ToString());
                    }
                }
                catch
                {
                    isconn = false;
                    errorCount = urls.Length;
                }
                //if (errorCount > 0 && errorCount < 3)
                //  isconn = true;
                return isconn;
            }


            #endregion
        }
    }
    展开全文
  • 国内的NB-IoT主要运行在B5和B8频段。 http://blog.csdn.net/zoomdy/article/details/72764847 ... 频段 中心频率 上行频率 下行频率 运营商 B5 850MHz 824MHz~849MHz 869MHz~894MHz 中国电信 B8...

    国内的NB-IoT主要运行在B5和B8频段。

    http://blog.csdn.net/zoomdy/article/details/72764847 
    mingdu.zheng at gmail dot com

    频段    中心频率    上行频率    下行频率    运营商
    B5    850MHz    824MHz~849MHz    869MHz~894MHz    中国电信
    B8    900MHz    880MHz~915MHz    925MHz~960MHz    中国移动、中国联通

    --------------------- 
    作者:半斗米 
    来源:CSDN 
    原文:https://blog.csdn.net/zoomdy/article/details/72764847 
    版权声明:本文为博主原创文章,转载请附上博文链接!

     

    今天在RF Bring Up之后,发现注册实网一直失败,在上海的同事使用联通卡注册实网ok,但在北京使用移动的物联网卡却一直注册不上,连之前仪器注册ok的板子也不好使,。

    后面经调查发现

    下面是来自https://blog.csdn.net/ypp240124016/article/details/84929937的博客

     

    有些4G物联网卡的使用是受限的,需要在卡里配置你所要访问的服务器的IP地址或者域名,如果没有配置的话TCP下行发送几次就会被强制断开连接;另外,4G卡都需要实名认证的,认证的时候需要卡绑定一个IMEI号设备,有些卡是运营商直接对接的,实名认证可以不用每张卡都进行,这种卡会跟第一次使用的设备的IMEI号自动绑定,如果再拿去其他IMEI号的设备使用的话会无法连接网络。

     

     

    展开全文
  • 最近一项目中要求显示网络流量,而且必须使用C#。事实上,调用 IpHlpApi.dll 的 GetIfTable API 可以轻易获得网络信息和网络流量。只是要在C#中实现还是比较复杂。先看看怎么定义该 API [DllImport("IpHlpApi.dll")...

    最近一项目中要求显示网络流量,而且必须使用C#。

    事实上,调用 IpHlpApi.dll 的 GetIfTable API 可以轻易获得网络信息和网络流量。只是要在C#中实现还是比较复杂。

    先看看怎么定义该 API

    [DllImport("IpHlpApi.dll")]
            extern static public uint GetIfTable(byte[] pIfTable, ref uint pdwSize, bool bOrder);


    本来想把 pIfTable 定义为 IntPtr,但是这样的结果是,获取的信息是错误的(直到现在都不知是什么原因)。

    但显然定义为 byte[] 是不能直接使用的。幸好在 Google Code Search 找到了三个类:

    CustomtMarshaler.cs

     

    MIB_IFROW.cs

     

    MIB_IFTABLE.cs


    再定义一个 NetInfo 类,存储网络信息

    NetInfo.cs


    OK,现在可以获取网络信息了

            /// <summary>
            /// Get IFTable
            /// </summary>
            /// <returns>MIB_IFTABLE Class</returns>
            private static MIB_IFTABLE GetAllIfTable()
            {
                //缓冲区大小
                uint dwSize = 0;

                //获取缓冲区大小
                uint ret = GetIfTable(null, ref dwSize, false);
                if (ret == 50)
                {
                    //此函数仅支持于 win98/nt 系统
                    return null;
                }

                //定义,获取 MIB_IFTABLE 对象
                MIB_IFTABLE tbl = new MIB_IFTABLE((int)dwSize);
                ret = GetIfTable(tbl.ByteArray, ref dwSize, false);

                //如果不成功
                if (ret != 0)
                {
                    return null;
                }

                return tbl;
            }

            /// <summary>
            /// Get NetInfo Class
            /// </summary>
            /// <param name="row">MIB_IFROW Class</param>
            /// <returns>NetInfo Class</returns>
            private static NetInfo GetNetInfo(MIB_IFROW row)
            {
                NetInfo ninfo = new NetInfo();
                ninfo.Index = row.dwIndex;
                ninfo.Name = Encoding.ASCII.GetString(row.bDescr, 0, (int)row.dwDescrLen);
                ninfo.PhysAddr = GetPhysAddr(row.bPhysAddr, (int)row.dwPhysAddrLen);
                ninfo.Type = (NetType)row.dwType;
                ninfo.Status = (NetState)row.dwOperStatus;
                ninfo.Speed = row.dwSpeed;
                ninfo.InErrors = row.dwInErrors;
                ninfo.InOctets = row.dwInOctets;
                ninfo.InUnknownProtos = row.dwInUnknownProtos;
                ninfo.OutErrors = row.dwOutErrors;
                ninfo.OutOctets = row.dwOutOctets;
                return ninfo;
            }

     

    /// <summary>
            /// 获取所有的网络信息
            /// </summary>
            /// <returns>NetInfo 网络信息范型</returns>
            public static List<NetInfo> GetAllNetInfo()
            {
                //定义范型
                List<NetInfo> ninfos = new List<NetInfo>();

                //定义,获取 MIB_IFTABLE 对象
                MIB_IFTABLE tbl = GetAllIfTable();

                //如果成功
                if (tbl != null)
                {
                    tbl.Deserialize();
                    for (int i = 0; i < tbl.Table.Length; i++)
                    {
                        ninfos.Add(GetNetInfo(tbl.Table[i]));
                    }
                }

                return ninfos;
            }


    PS:事实上,我把获取网络、CPU、内存、磁盘、进程信息等功能封装起来,并做了一个比较完善的 Windows 任务管理器,整理完后发布源码。

    展开全文
  • using System; using System.Web; using System.Net.Sockets; using System.Runtime.InteropServices; using System.Threading; namespace VvxT.Web {  public class ...
  • 现状:笔记本通过网线接入LAN1,通过无线接入LAN2,默认情况下,笔记本同时使用有线、无线网卡连接网络时,数据包要么全部发给LAN1,要么全部发给LAN2,;需求:笔记本既能访问LAN1,又能访问LAN2;方法:打开cmd,...
  • 4g图传数传实测

    2019-03-16 23:01:59
    又一位客户极高的评价,为了反馈大家,从文章看到的并且加我qq1767893964,备注gslink购买者,毕淘宝搜索下单的有很大的优惠哦。下面是客户的测试视频: 最近南京天气开始变暖,飞飞机的好时候又到来了。...
  • 在开发中某些项目我们需要判断当前网络转台详细情况,来做一些限制,... * 获取当前的网络状态 :没有网络-0:WIFI网络1:4G网络-4:3G网络-3:2G网络-2 * 自定义 * * @param context * @return */ public ...
  • 最近小编在少数派发现了一篇文章,讲的是如何在Win10上与iPhone互联,最终实现在电脑上接打电话、收发短信,这个篇文章切实的解决了小编的使用痛点,IT之家小编亲自试验该方法可行,再此将方法分享出来,希望能让跟...
  • 为什么80%的码农都做不了架构师?>>> ...
  • 游戏画质控制的时候要对当前网络进行测试,如果无线网络则使用高画质,否则使用基础画质。这里用到两个Unity的API:一个是Application.internetReachability,用来获取当前网络类型。但是这里只是判断出来当前设备的...
  • 目前我们熟悉的物联网卡大量引用在智能交通、智能安防、智能家居、智能新零售等场景中,常见的物联网卡作用即是在其中起到感应、定位功能,今天,我们就来了解一下物联网卡6大定位技术涉及哪些方面,它在其中的工作...
  • C# 获取硬件信息

    2016-04-22 14:31:19
    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using cuiplus; using System.Collections; using System.Threading;...using System.Manage
  • 前段时间公司需要跟百度聚屏联调,他们的接口数据都是通过protobuf封装的; 为此,我废了好大的脑子,毕竟开局一个文档(参数名和实际...在Google搜到发现貌似protobuf早期版本不支持C#,所以蛋蛋很是忧伤;后来找...
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 他能解决哪些问题? 1、考勤地分散在各个城市,甚至全球,希望总部统一管控 2、领导出差,在家,随时想查看员工的出勤状况 3、无法提供上网的复杂环境 ...
  • 一台电脑,有时通过有线网连接网络(调制解调器/局域网),如有网卡也可连接wifi。那么如何获取WLAN是否连接,和相应的信号强度呢? 就以下俩点: 获取电脑连网状态 获取无线网络的信号强度 ...
  • C# 32Bit电脑环境帮助类
1 2 3 4 5 ... 14
收藏数 262
精华内容 104
热门标签