|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
在上一篇文章中我们会商了Socket类的基础用法,并给出的例子中利用Socket类毗连服务器时利用了一种最复杂的毗连体例,也就是经由过程IP和端标语来毗连服务器。而为了使毗连服务器的体例更天真,Socket类不但能够经由过程本身的机关办法毗连服务器,并且也能够经由过程connect办法来毗连数据库。
1、经由过程机关办法毗连服务器
我们能够经由过程6个重载机关函数以分歧的体例来毗连服务器。这6个重载的机关函数能够分为两类:
1.主动选择IP
这类体例是最经常使用的。所谓主动选择IP,是指当本机有多块网卡大概在一个网卡上绑定了多个IP时,Socket类会主动为我们选择一个可用的IP.在上述6个机关办法中有4个是利用这类办法来毗连服务器的。
(1)publicSocket(Stringhost,intport)
这是最经常使用的机关办法,在后面的例子中就是利用的这个机关办法。在利用时只必要供应一个字符串范例的IP或域名和一个整型的端标语便可。在这个机关办法中大概会抛出两个毛病:UnknownHostException和IOException.产生第一个毛病的缘故原由是我们供应的host其实不存在或分歧法,而别的的毛病被回为IO毛病。因而,这个机关办法的完全界说是:
public Socket(String host, int port) throws UnknownHostException, IOException
(2)publicSocket(InetAddressinetaddress,intport)
这个机关办法和第一种机关办法相似,只是将字符串情势的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)publicSocket(Stringhost,intport,booleanstream)
这个机关办法和第一种机关办法差未几,只是多了一个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)publicSocket(InetAddressinetaddress,intport,booleanflag)
这个机关办法和第三种机关办法的flag标志的寄义一样,也是不倡议利用的。
上面的代码演示上述4种机关办法的利用:
packagemysocket;
import java.net.*;
import java.io.*;
public classMoreConnection
{
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);
}
}
}
<p>
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱. |
|