V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
intpbyd
V2EX  ›  C

判断网络连接状态

  •  
  •   intpbyd · 2015-03-11 14:24:52 +08:00 · 1772 次点击
    这是一个创建于 3555 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们学校的校园网是个局域网 需要登录后才能访问外网,采用DrCom网页登录(学校的很多网站不用登录也能上 比如学校官网等)。
    未登录状态下浏览器打开任意页面都会被跳转到账号登陆页面。

    windows的很多检测网络的API只要插上网线就说连接正常 该如何判断已经连上了外网呢?
    19 条回复    2015-03-13 09:52:35 +08:00
    nomaka
        1
    nomaka  
       2015-03-11 14:37:54 +08:00
    你连个外网地址 能通就说明连上了
    FastMem
        2
    FastMem  
       2015-03-11 16:03:02 +08:00
    很简单,由于我只会PHP不给演示代码了。

    可以这样,定义一个默认站点,然后用curl去抓取这个站点,判断是否存在指定内容,如果存在返回正常,不存在返回不正常就可以了。
    intpbyd
        3
    intpbyd  
    OP
       2015-03-11 16:16:52 +08:00 via Android
    @nomaka 编程来实现 不至于写个浏览器吧
    choury
        4
    choury  
       2015-03-11 16:34:22 +08:00
    你不会在jlu吧
    VYSE
        5
    VYSE  
       2015-03-11 16:38:15 +08:00   ❤️ 1
    sany217
        6
    sany217  
       2015-03-11 17:24:48 +08:00
    ICMP ping外网
    denghongcai
        7
    denghongcai  
       2015-03-11 17:55:04 +08:00
    Win32 API中有InternetGetConnectedState和InternetCheckConnection,配套使用即可
    chengr28
        8
    chengr28  
       2015-03-11 17:55:34 +08:00   ❤️ 1
    https://technet.microsoft.com/en-us/library/ee126135(v=ws.10).aspx
    巨硬自己有网络指示器,不过没发现有 API……貌似只能自己去请求,不过 HTTP 应该有 API 吧
    wzyuliyang
        9
    wzyuliyang  
       2015-03-11 17:59:21 +08:00
    #!/bin/bash
    result=$(curl -s -o /dev/null -w "%{http_code}" http://www.baidu.com)
    echo $result
    okflag=200
    if [ $result -eq 200 ] ; then
    echo "Network is ok"
    else
    echo "Network connection down! Attempting reconnection."

    fi
    15ir
        10
    15ir  
       2015-03-11 18:09:18 +08:00   ❤️ 1
    - - 我写过,其实吧,访问图片链接不就好了,一张是校内网的,访问成功就表示连上内网,一张放在外网,如果图片访问不了就练不了外网呗... 图片内容可以分别写“内网连接成功”,“外网连接成功”。

    比较简便且可以实现的。。
    gamexg
        11
    gamexg  
       2015-03-11 19:16:53 +08:00
    @15ir 好主意啊。
    15ir
        12
    15ir  
       2015-03-11 20:12:27 +08:00 via iPhone
    @gamexg 用pictureBox的话,属性设置一下,代码都不用敲...
    jefby
        13
    jefby  
       2015-03-11 20:33:31 +08:00
    ping www.baidu.com 查看返回值,如果$?==0,OK;否则没连外网
    andy12530
        14
    andy12530  
       2015-03-11 21:28:52 +08:00
    访问apple的一个网址,返回 success,说明通了。

    iphone就是这么干的啊,难道你们都不知道么。
    Delbert
        15
    Delbert  
       2015-03-11 22:07:08 +08:00
    @jefby /t/168381
    我们学校……估计教育网很多地方也这样。
    真是大快人心。
    withrock
        16
    withrock  
       2015-03-12 09:57:21 +08:00
    #检查主机是否连通
    ping -c 2 -w 4 $host >/dev/null 2>&1
    case "$?" in
    "0") echo "host is O.K.";;
    *) echo "host[$host] is NOT available." && exit 127;;
    esac
    intpbyd
        17
    intpbyd  
    OP
       2015-03-12 10:18:10 +08:00 via Android
    @denghongcai 没用 始终显示已连通
    legendecas
        18
    legendecas  
       2015-03-12 14:59:12 +08:00
    安卓5.0的判断机制是先访问 clients3.google.com/generate_204 这个网址,而这个网址如字面所说,会产生一个 http 204 返回值。204返回值的意思就是空内容。如果当前wifi是需要登录才可以连接,那么当试图访问google的服务器的时候,wifi的验证机制一定会自动跳转到一个登录页面,这个时候http请求的返回值就必然不是204了。就是通过这一机制,便可以区分当前wifi是否需要验证。
    intpbyd
        19
    intpbyd  
    OP
       2015-03-13 09:52:35 +08:00 via Android
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3345 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:16 · PVG 20:16 · LAX 04:16 · JFK 07:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.