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

Posted

篇首语:别在该厚脸皮的年纪里过度在意自尊,别在该努力的年纪怨天尤人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java网络编程 多种多样的连接数据库的方式相关的知识,希望对你有一定的参考价值。

Java网络编程 多种多样的连接数据库的方式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

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

   自动选择IP

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

   <! [if !supportLists] >( )   <! [endif] >public Socket(String host int port)

  这是最常用的构造方法 在前面的例子中就是使用的这个构造方法 在使用时只需要提供一个字符串类型的IP或域名以及一个整型的端口号即可 在这个构造方法中可能会抛出两个错误 UnknownHostException和IOException 发生第一个错误的原因是我们提供的host并不存在或不合法 而其它的错误被归为IO错误 因此 这个构造方法的完整定义是

  public Socket(String host int port) throws UnknownHostException IOException

  ( ) 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

  ( ) 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连接

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

  这个构造方法和第三种构造方法的flag标记的含义一样 也是不建议使用的

  下面的代码演示上述 种构造方法的使用

   package mysocket; import *;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 socket = null socket = null socket = null socket = null;        try                    // 如果将改成其它不存在的域名                将抛出UnknownHostException错误            // 测试public Socket(String host int port)            socket = new Socket( );            System out println( socket 连接成功! );            // 测试public Socket(InetAddress inetaddress int port)            socket = new Socket(InetAddress getByName( ) );            System out println( socket 连接成功! );// 下面的两种建立连接的方式并不建议使用            // 测试public Socket(String host int port boolean stream)            socket = new Socket( false);            System out println( socket 连接成功! );            // 测试public Socket(InetAddress inetaddress int i boolean flag)            socket = new Socket(InetAddress getByName( ) false);            System out println( socket 连接成功! );                catch (UnknownHostException e)                    System out println( UnknownHostException 被抛出! );                catch (IOException e)                    System out println( IOException 被抛出! );                finally                    closeSocket(socket );            closeSocket(socket );            closeSocket(socket );            closeSocket(socket );           

  在上面代码中的最后通过finally关闭了被打开的Socket连接 这是一个好习惯 因为只有在将关闭Socket连接的代码写在finally里 无论是否出错 都会执行这些代码 但要注意 在关闭Socket连接之前 必须检查Socket对象是否为null 这是因为错误很可能在建立连接时发生 这样Socket对象就没有建立成功 也就用不着关闭了

   手动绑定IP

  当本机有多个IP时(这些IP可能是多块网卡上的 也可能是一块网卡上绑定的多个IP) 在连接服务器时需要由客户端确定需要使用哪个IP 这样就必须使用Socket类的另外两个构方法来处理 下面让我们来看看这两个构造方法是如何来使用特定的IP来连接服务器的

  public Socket(String host int port InetAddress inetaddress int localPort)

  这个构造方法的参数分为两部分 第一部分为前两个参数 host和port 它们分别表示要连接的服务器的IP和端口号 第二部分为后两个参数 inetaddress和localPort 其中inetaddress则表示要使用的本地的IP 而localPort则表示要绑定的本地端口号 这个localPort这以设置为本机的任何未被绑定的端口号 如果将localPort的值设为 java将在 到 之间随即选择一个未绑定的端口号 因此 在一般情况下将localPort设为

  public Socket(InetAddress inetaddress int port InetAddress inetaddress int localPort)

  这个构造方法和第一个构造方法基本相同 只是将第一个参数host换成了inetaddress 其它的使用方法和第一个构造方法类似

  在下面的代码中将使用这两个构造方法来做一个实验 我们假设有两台计算机 PC 和PC PC 和PC 各有一块网卡 PC 绑定有两个IP 和 PC 绑定有一个IP PC 和PC 的子网掩码都是 而PC 的默认网关为 下面的代码需要在PC 上运行

   package mysocket; import *;public class MoreConnection     public static void main(String[] args)            try                    InetAddress localAddress = InetAddress getByName( );            InetAddress localAddress = InetAddress getByName( );            // 如果将localAddress 改成localAddress socket 无法连接成功            Socket socket = new Socket( localAddress );            System out println( socket 连接成功! );            Socket socket = new Socket( localAddress );            System out println( socket 连接成功! );            // 下面的语句将抛出一个IOException错误            Socket socket = new Socket( localAddress );            System out println( socket 连接成功! );            socket close();            socket close();            socket close();                catch (Exception e)                    System out println(e getMessage());           

  运行上面代码的输出结果如下

  socket 连接成功!

  socket 连接成功!

  Connection timed out connect

  从上面的输出结果可以看出 socket 和socket 已经连接成功 而socket 并未连接成功 从例程 可以看出 socket 在连接时使用localAddress 绑定到了 上 而PC 的IP是 因此 socket 所使用的IP和PC 的IP在同一个网段 所以socket 可以连接成功 如果将localAddress 改成localAddress 后 socket 将无法连接成功 另外两个Socket连接socket 和socket 是通过Internet连接 它们所不同的是socket 绑定的是 而socket 绑定的是 它们执行的结果是socket 可以连接成功 而socket 连接失败 这是因为socket 所绑定的IP和PC 的默认网关 在同一个网段 因此 socket 可以连接到Internet 而socket 所绑定的IP和PC 的IP不在同一个网段 因此 socket 将无法连接到Internet

  二 通过connect方法连接服务器

  Socket类不仅可以通过构造方法直接连接服务器 而且还可以建立未连接的Socket对象 并通过connect方法来连接服务器 Socket类的connect方法有两个重载形式

   public void connect(SocketAddress endpoint) throws IOException

  Socket类的connect方法和它的构造方法在描述服务器信息(IP和端口)上有一些差异 在connect方法中并未象构造方法中以字符串形式的host和整数形式的port作为参数 而是直接将IP和端口封装在了SocketAddress类的子类InetSocketAddress中 可按如下形式使用这个connect方法

   Socket socket = new Socket();nnect(new InetSocketAddress(host port));

   public void connect(SocketAddress endpoint int timeout) throws IOException

  这个connect方法和第一个connect类似 只是多了一个timeout参数 这个参数表示连接的超时时间 单位是毫秒 使用timeout设为 则使用默认的超时时间

  在使用Socket类的构造方法连接服务器时可以直接通过构造方法绑定本地IP 而connect方法可以通过Socket类的bind方法来绑定本地IP 例程 演示如何使用connect方法和bind方法

   package mysocket;import *;public class MoreConnection     public static void main(String[] args)            try                    Socket socket = new Socket();            Socket socket = new Socket();            Socket socket = new Socket();            nnect(new InetSocketAddress( ));            socket close();            System out println( socket 连接成功! );                         /*               将socket 绑定到 将产生一个IOException错误              socket bind(new InetSocketAddress( ));            */            socket bind(new InetSocketAddress( ));            nnect(new InetSocketAddress( ));                         socket close();            System out println( socket 连接成功! );socket bind(new InetSocketAddress( ));            nnect(new InetSocketAddress( )                              );                        socket close();            System out println( socket 连接成功! );                catch (Exception e)                    System out println(e getMessage());           

  上面的代码的输出结果为

  socket 连接成功!

  socket 连接成功!

  Connection timed out connect

  在上面代码中的socket 连接服务器时为其设置了超时时间( 毫秒) 因此 socket 在非常短的时间就抛出了IOException错误

cha138/Article/program/Java/hx/201311/26913

相关参考

什么是网络数据库系统?

  网络数据库系统:数据的网络模型是以记录类型为结点的网络结构,对于网络中的每一个子结点来说,都可以有多个与它连接的父结点,此外,在两个结点之间,可以有两种或多种联系。网络模型反映了实体之间多种多样错

什么是网络数据库系统?

  网络数据库系统:数据的网络模型是以记录类型为结点的网络结构,对于网络中的每一个子结点来说,都可以有多个与它连接的父结点,此外,在两个结点之间,可以有两种或多种联系。网络模型反映了实体之间多种多样错

知识大全 oracle的共享连接和专用连接方式之初探

在专用连接方式中每一个连接到数据库服务器的客户端请求服务器会和客户端之间建立起连接这个连接用于专门处理该客户端的所有请求直到用户主动断开连接或网络出现中断在连接处于空闲时后台进程PMON会每隔一段时间

知识大全 Java进行并发多连接socket编程

Java进行并发多连接socket编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java多

知识大全 Java网络数据库编程及其应用

Java网络数据库编程及其应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随着电子商务及动态

知识大全 Java连接各种数据库的实例

Java连接各种数据库的实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  此文中的代码主要列出

知识大全 Java怎样连接Access数据库

Java怎样连接Access数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  建数据库  配

知识大全 Java连接数据库的使用步骤

Java连接数据库的使用步骤  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引入外部jar包(m

知识大全 数据库连接池java实现小结

  因为工作需要要使用到连接池所以拜读了互联网上众多前辈的文章学了不少经验这里想做一个小结加上自己的想法和在一起希望能给大家一些帮助    目的  消除数据库频繁连接带来的开销和瓶颈  解决方案  不

知识大全 java 连接各类数据库

  Oracle/i/i数据库(thin模式)ClassforName(oraclejdbcdriverOracleDriver)newInstance();Stringurl=jdbc:oracle