android(java) socket判断网络连接状态

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

相关方法如下:

[java]  view plain copy
  1. 方法一:  
  2.     try {  
  3.         socket.sendUrgentData(0xFF);  
  4.     } catch (IOException e) {  
  5.         //网络断开  
  6.         handleNetDisconnect();  
  7.         e.printStackTrace();  
  8.     }  

方法二:

[java]  view plain copy
  1. /** 
  2.      * 通过tcp发送信息 
  3.      * @param str 
  4.      */  
  5.     private boolean sendMsg(String str){  
  6.         boolean isConnect=false;  
  7.           
  8.         if(dos!=null)  
  9.         try {  
  10.             dos.write(str.getBytes("UTF-8"));  
  11.             dos.flush();  
  12.             isConnect=true;  
  13.         } catch (IOException e) {         
  14.             Log.e("tcpmsg""writeOutputStream fail");  
  15.             isConnect=false;  
  16.         }   
  17.           
  18.         return isConnect;  
  19.     }  

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

android中ping方法:

[java]  view plain copy
  1. private boolean startPing(String ip){   Log.e("Ping""startPing...");  
  2.         boolean success=false;  
  3.         Process p =null;  
  4.           
  5.          try {   
  6.                 p = Runtime.getRuntime().exec("ping -c 1 -i 0.2 -W 1 " +ip);   
  7.                 int status = p.waitFor();   
  8.                 if (status == 0) {   
  9.                     success=true;   
  10.                 } else {   
  11.                     success=false;    
  12.                 }   
  13.                 } catch (IOException e) {   
  14.                     success=false;     
  15.                 } catch (InterruptedException e) {   
  16.                     success=false;     
  17.                 }finally{  
  18.                     p.destroy();  
  19.                 }  
  20.                
  21.          return success;  
  22.     }  

其中 -c 1为发送的次数,1为表示发送1次,-w 表示发送后等待响应的时间。
通过以上代码可以实现对某个ip的测试,测试时需要使用真机。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计和实现一个基于Java的五子棋手机网络对战游戏涉及以下方面: 技术选择: Java编程语言:作为主要开发语言,提供跨平台的特性,适合移动应用的开发。 Android平台:用于移动端应用程序的开发,提供了丰富的UI组件和网络信功能。 Socket编程:用于实现客户端与服务器之间的网络信,确保玩家可以进行实时对战。 五子棋算法:实现游戏规则、胜负判断等核心逻辑。 功能设计: 用户登录注册:玩家可以注册账号并登录游戏,也可以选择匿名游戏。 实时匹配:玩家登录后可以选择进入实时匹配模式,系统会自动匹配其他在线玩家进行对战。 游戏界面:包括棋盘、棋子、玩家信息显示等。 下棋功能:玩家可以在自己的回合下棋,系统会实时显示棋子,并检查是否胜利。 胜负判断:实现五子棋的胜负判断逻辑,判断是否有一方取得五子连珠。 实时聊天:玩家可以在游戏过程中进行实时聊天,增加互动性。 排行榜:显示玩家的胜率、等级等信息,激励玩家竞争。 架构设计: 客户端:包括游戏界面显示、用户输入响应、网络信等功能。 服务器:处理客户端请求、管理游戏状态、匹配玩家等。 数据库:存储玩家账号信息、游戏记录、排行榜等数据。 技术实现: 客户端:使用Android Studio进行界面设计和开发,利用Socket建立与服务器的TCP连接,实现实时信。 服务器端:Java编写服务器程序,使用Socket监听客户端连接,处理游戏逻辑和数据交换。 数据库:使用SQLite或其他数据库存储玩家信息和游戏数据。 安全性和稳定性: 对于用户账号和密码的安全存储和传输,可以使用加密技术。 对于网络信,进行数据校验和异常处理,确保信的稳定性和可靠性。 针对作弊行为,可以设计监测和防范机制,保证游戏的公平性和正常性。 过以上设计和实现,玩家可以在手机上随时随地与其他玩家进行五子棋对战,享受游戏的乐趣并提高棋艺。同时,系统的实时信和数据管理确保了游戏的流畅性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值