zoukankan      html  css  js  c++  java
  • android下socket编程问题:服务器关闭时,客户端发送请求的异常处理

    我用socket分别创建了一个服务器和一个客户端。 

    当服务器程序运行时,客户端和服务器发送接收数据是OK的。 

    但是,如果服务器程序关闭以后,客户端仍然发送请求的话,会抛出一个IOException。但这个时间间隔很久,要三到四分钟才会抛出这个异常的。刚开始还以为是死机了呢! 

    我想在客户端做一个处理:如果服务器未开,要弹出一个提示框,然后结束当前程序。 
    请问怎么实现? 

    附创建客户端的部分代码: 
    Socket socket = new Socket("10.13.81.3",5000); 

    sendMsg(str);//这个是给服务器发送数据的接口 
    readMsg();//这个是服务器收到后 立即会发送数据给客户端,由客户端在这里接收数据 

    我就想在创建socket之后,判断是否connect,没有的话就弹出对话框,但是不成功. 

    解决方法: 

    //global variables
    public Socket socket = null;
    private InetSocketAddress isa = null;
    private static final String HOST = "10.13.81.26";
    private static final String PORT = 5000;
    private static final String TIMEOUT = 100;
    
    ///connect to server
    try
    {
       socket = new Socket();
       isa = new InetSocketAddress(HOST,PORT);
       socket.connect(isa,TIMEOUT);
    }
    catch(IOException e)
    {
       e.printStackTrace();
    }
    finnally
    {
       this.disconnectToServer();   
    }
    
    ///disconnect to server
    try
    {
       if(socket != null)
       {
       socket.close();
       }
       catch(IOException e)
       {
       e.printStackTrace();
       }
    }
    

    之前链接socket直接用: 
    Socket socket = new Socket("10.13.81.26",5000); 
    socket.setTimeout(100); 
    这样,如果出现服务器端未开启时,即使设置了100ms超时时间,也会过很长时间才会捕捉到IOException 

    现在先定义isa,通过isa跟socket链接 可以解决上面的问题 

    转自:http://gundumw100.iteye.com/blog/1117694

  • 相关阅读:
    union和union all 合并查询
    c#中取整,向上取,向下取
    多个DataSet数据合并
    js未定义判断
    C# 获取时间差状态
    SQL中inner join、outer join和cross join的区别
    朗朗跄跄的受伤,跌跌撞撞的坚强
    IIS7.5 平台.NET无后缀名伪静态实现办法-服务器配置
    检查Android系统版本
    js 实现搜索功能
  • 原文地址:https://www.cnblogs.com/shanmao/p/3558636.html
Copyright © 2011-2022 走看看