当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

Java网络编程从入门到精通(16):客户端套接字(Socket)的超时[Java编程]

赞助商链接



  本文“Java网络编程从入门到精通(16):客户端套接字(Socket)的超时[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

客户端套接字的超时(timeout)就是指在客户端通过Socket和服务器举行通讯的历程中,由于网络耽误,网络阻塞等缘由,造成服务器并未及时呼应客户端的一种现象.在一段时间后,客户端由于未收到服务端的呼应而抛出一个超时错误; 此中客户端所等候的时间就是超不时间.

由于生产超时错误的一端都是被动端;也就是说,这一端是在接纳数据,而不是发送数据.关于客户端Socket来说,只有两个地方是在接纳数据;一个是在衔接服务器时;另一个是在衔接服务器成功后,接纳服务器发过来的数据时.因此,客户端超时也分为两种范例:衔接超时和读取数据超时.

1、衔接超时

这种超时在前面的例子中已经利用过.在Socket类中只有通过connect办法的第二个参数才能指定衔接超时的时间.由于利用connect办法衔接服务器必必要指定IP和端口;因此,无效的IP或端口将会引发衔接超时错误.

2、读取数据超时

在衔接服务器成功后,Socket所做的最重要的两件事就是“接纳数据”和“发送数据”;而在接纳数据时大概因为网络耽误、网络阻塞等缘由,客户端一向处于等候状况;而客户端在等候一段时间后,假如服务器还没有发送数据到客户端,那么客户端Socket将会抛出一个超时错误.

我们可以通过Socket类的setSoTimeout办法来设置读取数据超时的时间;时间的单位是毫秒.这个办法必须在读取数据之前调用才会见效.假如将超不时间设为0,则不利用超不时间;也就是说,客户端什么时刻和服务器断开,将完好取决于服务端程序的超时设置.以下面的语句将读取数据超不时间设为5秒.

Socket socket = new Socket();
socket.setSoTimeout(5000);
socket.connect(… …);
socket.getInputStream().read();

要注意的是不要将设置衔接超时和读取数据超时设置得太小,假如值太小,如100,大概会造成服务器的数据还没来得及发过来,客户端就抛出超时错误的现象.下面的代码给出了一个用于测试衔接超时和读取数据超时的例子.

package mynet;

import java.net.*;

public class SocketTimeout
{
     public static void main(String[] args)
     {
         long time1 = 0, time2 = 0;
         Socket socket = new Socket();
         try
         {
             if (args.length < 4)
             {
                 System.out.println("参数错误!");
                 return;
             }

             time1 = System.currentTimeMillis();
             socket.connect(new InetSocketAddress(args[0], Integer
                     .parseInt(args[1])), Integer.parseInt(args[2]));
             socket.setSoTimeout(Integer.parseInt(args[3]));
             time1 = System.currentTimeMillis();
             socket.getInputStream().read();
         }
         catch (SocketTimeoutException e)
         {
             if (!socket.isClosed() && socket.isConnected())
                 System.out.println("读取数据超时!");
             else
                 System.out.println("衔接超时");
         }
         catch (Exception e)
         {
             System.out.println(e.getMessage());
         }
         finally
         {
             time2 = System.currentTimeMillis();
             System.out.println(time2 - time1);
         }
     }
}


  以上是“Java网络编程从入门到精通(16):客户端套接字(Socket)的超时[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .