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

<b>Java网络编程从入门到精通(14):多种多样的成立网络衔接的办法</b>[Java编程]

赞助商链接



  本文“<b>Java网络编程从入门到精通(14):多种多样的成立网络衔接的办法</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在上一篇文章中我们谈论了Socket类的基本用法,并给出的例子中利用Socket类衔接服务器时利用了一种最简单的衔接方法,也就是通过IP和端口号来衔接服务器.而为了使衔接服务器的方法更机动,Socket类不但可以通过自身的构造办法衔接服务器,并且也可以通过connect办法来衔接数据库.

1、通过构造办法衔接服务器

我们可以通过6个重载构造函数以差别的方法来衔接服务器.这6个重载的构造函数可以分为两类:

1.自动挑选IP

这种方法是最常用的.所谓自动挑选IP,是指当本机有多块网卡大概在一个网卡上绑定了多个IP时,Socket类会自动为我们挑选一个可用的IP.在上述6个构造办法中有4个是利用这种办法来衔接服务器的.

(1) public Socket(String host, int port)

这是最常用的构造办法,在前面的例子中就是利用的这个构造办法.在利用时只需求供应一个字符串范例的IP或域名以及一个整型的端口号便可.在这个构造办法中大概会抛出两个错误:UnknownHostException和IOException.发生第一个错误的缘由是我们供应的host并不存在或不合理,而别的的错误被归为IO错误.因此,这个构造办法的完好定义是:

public Socket(String host, int port) throws UnknownHostException, IOException

(2) public Socket(InetAddress inetaddress, int port)

这个构造办法和第一种构造办法近似,只是将字符串情势的host改成InetAddress对象范例了.在这个构造办法中之所以要利用InetAddress类主如果因为考虑到在程序中大概需求利用Socket类多次衔接同一个IP或域名,这样利用InetAddress类的效率对比高.别的,在利用字符串范例的host衔接服务器时,大概会发生两个错误,但利用InetAddress对象来描写host,只会发生IOException错误,这是因为当你将IP或域名传给InetAddress时,InetAddress会自动查抄这个IP或域名,假如这个IP或域名无效,那么InetAddress就会抛出UnknownHostException错误,而不会由Socket类的构造办法抛出.因此,这个构造办法的完好定义是:

public Socket(InetAddress inetaddress, int port) throws IOException

(3) public Socket(String host, int port, boolean stream)

这个构造办法和第一种构造办法差不多,只是多了一个boolean范例的stream参数.假如这个stream为true,那么这个构造办法和第一种构造办法完好一样.假如stream为false,则利用UDP协议成立一个UDP衔接(UDP将在下面的章节具体谈论,在这里只要知道它和TCP最大的辨别是UDP是面向无衔接的,而TCP是面向有衔接的),大概是当初Sun的开辟人员在编写Socket类时还未考虑编写处理UDP衔接的DatagramSocket类,所以才将成立UDP衔接的功效加入到Socket类中,不过Sun在后来的JDK中加入了DatagramSocket类,所以,这个构造办法就没什么用了,因此,Sun将其设为了Deprecated标志,也就是说,这个构造办法在今后的JDK版本中可以会被删除.其于以上缘由,在利用Java编写网络程序时,尽大概不要利用这个构造办法来成立UDP衔接.

(4) public Socket(InetAddress inetaddress, int port, boolean flag)

这个构造办法和第三种构造办法的flag标志的含义一样,也是不倡议利用的.

下面的代码演示上述4种构造办法的利用:

package mysocket;

import java.net.*;
import java.io.*;

public class MoreConnection
{
     private static void closeSocket(Socket socket)
     {
         if (socket != null)
             try
             {
                 socket.close();
             }
             catch (Exception e) { }
     }

     public static void main(String[] args)
     {
         Socket socket1 = null, socket2 = null, socket3 = null, socket4 = null;
         try
         {
             // 假如将www.ptpress.com.cn改成别的不存在的域名,将抛出UnknownHostException错误
             // 测试public Socket(String host, int port)
             socket1 = new Socket("www.ptpress.com.cn", 80);
             System.out.println("socket1衔接成功!");
             // 测试public Socket(InetAddress inetaddress, int port)
             socket2 = new Socket(InetAddress.getByName("www.ptpress.com.cn"), 80);
             System.out.println("socket2衔接成功!");

             // 下面的两种成立衔接的方法并不倡议利用
             // 测试public Socket(String host, int port, boolean stream)
             socket3 = new Socket("www.ptpress.com.cn", 80, false);
             System.out.println("socket3衔接成功!");
             // 测试public Socket(InetAddress inetaddress, int i, boolean flag)
             socket4 = new Socket(InetAddress.getByName("www.ptpress.com.cn"), 80, false);
             System.out.println("socket4衔接成功!");
         }
         catch (UnknownHostException e)
         {
             System.out.println("UnknownHostException 被抛出!");
         }
         catch (IOException e)
         {
             System.out.println("IOException 被抛出!");
         }
         finally
         {
             closeSocket(socket1);
             closeSocket(socket2);
             closeSocket(socket3);
             closeSocket(socket4);
         }
     }
}


  以上是“<b>Java网络编程从入门到精通(14):多种多样的成立网络衔接的办法</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

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

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