(转)Android 实现联网(二)——java.net漫游

来源:互联网 发布:淘宝u站导航 编辑:程序博客网 时间:2024/05/19 05:32

Android 实现联网(二)——java.net漫游

By: 海市蜃楼 | In: Android开发


相比较C++,JAVA在网络编程方面的优势是不言而喻的。想当初学习MFC网络方面的痛苦,现在看到java.net包中的类,感觉轻松多了。说点题外话:在C++网络方面可以推荐给大家一个很好的开源项目POCO库,这个库在网络方面的功能只能用:那是相当强大,有兴趣的可以去学习下。

在Android 实现联网(一)——package说明篇幅中,我们简要介绍了Android 网络方面的包,本篇幅我们漫游java.net包,按照网络方面的知识来逐步学习java网络编程,并给大家介绍一些小例子,边学习边写代码。

首先,IP地址

IP地址估计大家都明白,我们就直接来看java.net中的类吧。

详细介绍就不多说了,看2个简单的小例子如下:
String GetHostAddress(String strHostName)
{
InetAddress address = null;
try
{
address = InetAddress.getByName(strHostName);
}
catch(UnknownHostException e)
{
System.out.println(e.getMessage());
}
return InetAddress.getHostAddress() ;
}

void GetAllIP(String strHostName)
{
InetAddress[] add = null;
try
{
add = InetAddress.getAllByName(strHostName);
for(int i=0;i<addr.lenth;i++)
System.out.println(addr[i]);
}
catch(UnknownHostException e)
{
System.out.println(e.getMessage());
}
}

上面2个小例子很简单,但是有一点必须说明的,在写网络编程方面的,必须注意异常的捕获,网络异常是比较正常的现象,比如说当前网络繁忙,网络连接超时,更是“家常便饭”。因此在写网络编程的时候,必须养成捕获异常的好习惯,查看完函数说明后,必须要注意网络异常的说明。例如下图中的说明:


在使用getByAddress()函数的时候就必须捕获UnknownHostException这个异常。

然后,URL地址


看到这个类,不仅让我想起来MFC在网络编程方面的复杂,一个

BOOL AFXAPI AfxParseURL(LPCTSTR pstrURL, DWORD& dwServiceType,CString& strServer, CString& strObject, INTERNET_PORT& nPort);

函数,让人看起来就感觉不知道在说明,在编写MFC网络编程方面的时候一般都会自己写个URL类,而在JAVA中的直接提供了这个类,让初学者看起来明白多了。一个简单的例子如下:

Void EasyURL(String strURL)
{
URL url = new URL(strURL);
try
{
InputStream html = url.openStream();
int c;
do{
c= html.read();
cf(c!=-1) System.out.println((char)c);
}while(c!=-1)
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}

其次,套接字socket类


套接字通信的基本思想比较简单,客户端建立一个到服务器的链接,一旦连接建立了,客户端就可以往套接字里写入数据,并向服务器发送数据;反过来,服务器读取客户端写入套接字里的数据。几乎就那样简单,也许细节会复杂些,但是基本思想就这么简单。举个简单的例子如下:

void WebPing(String strURL)
{
try
{
InetAddress addr;
Socket sock = new Socket(strURL,80);
Addr = sock.getInetAddress();
System.out.println(“Connceted to”+addr);
Sock.close();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}

如果使用本地主机(localhost)来测试这个程序,输出结果如下:
Connceted to localhost/127.0.0.1
InetAddress.toString()的隐含调用(println调用)自动输出主机名和IP地址。

至于其他套接字:DatagramSocket(通过UDP通信的套接字),MulticastSocket(一种用于多点传送的套接字)以及ServerSocket(一种用于监听来自客户端的连接的套接字),在这里就不一一说明。

最后,URLConncetion类

在一般情况下,URL这个类就可以满足我们的需求,但是在一些特殊情况下,比如HTTP数据头的传递,这个时候我们就得使用URLConncetion,如下图所示:


使用URLConncetion,我们对网络的控制就增加了很多,举个例子如下:

void SendRequest(String strURL)
{
URL url = URL(strURL);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty(“Content-type”,”application/xxx”);
conn.connect();
System.out.println(Conn.getResponseMessage());
InputMessage is = Conn.getIputStream();
int c;
do{
c = is.read();
if(c!=-1) System.out.println((char)c);
}while(c!=-1)
}

关于HTTP数据头方面的知识,前段时间在编写流媒体下载的时候学习了下HTTP数据头的结构,下面列举一个HTTP request/response的一个完整流程如下,有兴趣的可以看下:


总结说明

通过类图并结合具体的例子,我们就把java.net包漫游的一遍,这不得不说JAVA在网络编程方面的确很简单。我个人觉得JAVA在网络方面的设计更加符合我们在学习网络课程中学习的理论知识,而MFC在这方面就封装的不这么好,使用起来比较麻烦,对初学者来说理解起来比较困难。

相关文章

  • Android 实现联网(四)——TCP/UDP
  • Android 实现联网(三)——在线程中联网
  • Android 实现联网(一)——package说明

转自:http://www.moandroid.com/?p=1386


原创粉丝点击