<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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |