zoukankan      html  css  js  c++  java
  • android(java) socket判断网络连接状态

    在 android socket 编程中我们需要时刻对其网络状态进行判断,android(java)对网络状态判断的方法(isClosed(),isConnected(),isInputShutdown(),sOutputShutdown())中,并没有有效方法,这些都是判断本地socket端的状态的,如果要判断远端的socket状态,则可通过隔段时间向对方发送数据,如果发送过程出现异常,则证明网络出现问题。

    相关方法如下:

    方法一:
    	try {
    		socket.sendUrgentData(0xFF);
    	} catch (IOException e) {
    		//网络断开
    		handleNetDisconnect();
    		e.printStackTrace();
    	}

    方法二:

    /**
    	 * 通过tcp发送信息
    	 * @param str
    	 */
    	private boolean sendMsg(String str){
    		boolean isConnect=false;
    		
    		if(dos!=null)
    		try {
    			dos.write(str.getBytes("UTF-8"));
    			dos.flush();
    			isConnect=true;
    		} catch (IOException e) {		
    			Log.e("tcpmsg", "writeOutputStream fail");
    			isConnect=false;
    		} 
    		
    		return isConnect;
    	}

    以上两种方法貌似还可以使用,但是有种情况也是无效的,例如:对方单方向断网(拔掉网线)。这种情况下就需要其他方法判断了,我们可以使用类似于windows下的Ping命令,来使用Linux下的ping命令,这是目前最有效的网络状态判定,也是比较准确的方法。

    android中ping方法:

    private boolean startPing(String ip){	Log.e("Ping", "startPing...");
    		boolean success=false;
    		Process p =null;
    		
    		 try { 
    	            p = Runtime.getRuntime().exec("ping -c 1 -i 0.2 -W 1 " +ip); 
    	            int status = p.waitFor(); 
    	            if (status == 0) { 
    	                success=true; 
    	            } else { 
    	                success=false;  
    	            } 
    	            } catch (IOException e) { 
    	            	success=false;   
    	            } catch (InterruptedException e) { 
    	            	success=false;   
    	            }finally{
    	            	p.destroy();
    	            }
    	         
    		 return success;
    	}

    其中 -c 1为发送的次数,1为表示发送1次,-w 表示发送后等待响应的时间。
    通过以上代码可以实现对某个ip的测试,测试时需要使用真机。




  • 相关阅读:
    js实现小球碰撞游戏
    jquery实现简易的计算器
    js中的substr和substring区别
    学习笔记:模拟退火
    解题报告:luogu P4879
    解题报告:CF58C
    解题报告:luogu P1160
    解题报告:CF1244D
    学习笔记:三分法(唔,好像不是唉)
    解题报告: CF1288C
  • 原文地址:https://www.cnblogs.com/happyxiaoyu02/p/6818950.html
Copyright © 2011-2022 走看看