你可以在m_hSocket.connect(remoteAddr, 5000);前后加上当前时间,然后计算两个时间差,看是否超时刚好为5000毫秒,以此判断此语句是否运行正常。否则,检查其它代码。

解决方案 »

  1.   

    可以自己写个定时器:
                                    Timer timer = new Timer();
    TimerTask tt = new TimerTask() {
    @Override
    public void run() {
    //判定超时后执行操作
    handler.sendEmptyMessage(1);
    if (timer!=null) {
    timer.cancel();
    timer.purge();
    System.out.println("关闭定时器!");
    }
    }
    };
                                    //启动定时器
    timer.schedule(tt, 30000, 1);
      

  2.   

    你可能需要搞清楚连接超时和socket超时的区别
      

  3.   


    这个是我连接服务端的主要代码
    SocketAddress remoteAddr = new InetSocketAddress(szIP,nPort); //获取sockaddress对象

    m_hSocket = new Socket(szIP, nPort);
    m_hSocket.connect(remoteAddr, 5000); //设置连接超时 5秒m_inStream = new DataInputStream(m_hSocket.getInputStream());
    m_outStream = new DataOutputStream(m_hSocket.getOutputStream());我该吧您这个自己创建的计时器加在哪里呢?
      

  4.   

    socket超时是socket对象执行setSoTimeout(int timeout); 方法,你仅仅是设置的是连接超时
      

  5.   

    一样的,我并不是连不上,我是在测试,所以我那个IP是随便搞的一个IP。
      

  6.   

    OK,解决了,看得这位大哥的文章,希望后继者,也参考一下http://blog.csdn.net/wq105032007067/article/details/6222581
    不过还是很感谢各位大哥的关注。结贴给分,呵呵呵
      

  7.   

    socket = new Socket();
    socket.connect(new InetSocketAddress(IConstants.SERVER_IP, IConstants.SERVER_PORT), 3000);
      

  8.   

    亲。new socket()本身就是个阻塞的函数。你在它屁股后面设置,当然是无效的。