当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>JAVA网络编程

Java网络编程 多种多样的连接数据库的方式

  一、通过构造方法连接服务器

  我们可以通过6个重载构造函数以不同的方式来连接服务器。这6个重载的构造函数可以分为两类:

  1. 自动选择IP

  这种方式是最常用的。所谓自动选择IP,是指当本机有多块网卡或者在一个网卡上绑定了多个IP时,Socket类会自动为我们选择一个可用的IP。在上述6个构造方法中有4个是使用这种方法来连接服务器的。

<!--[if !supportLists]-->(1)
   <!--[endif]-->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);
        }
    }
}

 

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接