现在的位置: 首页 > 综合 > 正文

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

2017年12月25日 ⁄ 综合 ⁄ 共 2974字 ⁄ 字号 评论关闭
文章目录

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

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

首先,IP地址

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

 

详细介绍就不多说了,看2个简单的小例子如下:

Java代码 
  1. String GetHostAddress (String strHostName)  
  2. {  
  3. InetAddress address = null;  
  4. try  
  5. {  
  6. address = InetAddress.getByName (strHostName);  
  7. }  
  8. catch(UnknownHostException e)  
  9. {  
  10. System.out.println(e.getMessage());  
  11. }  
  12. return InetAddress.getHostAddress () ;  
  13. }  
  14.   
  15. void GetAllIP (String strHostName)  
  16. {  
  17. InetAddress[] add = null;  
  18. try  
  19. {  
  20. add = InetAddress.getAllByName (strHostName);  
  21. for(int i=0;i<addr.lenth;i++)  
  22. System.out.println(addr[i]);  
  23. }  
  24. catch(UnknownHostException e)  
  25. {  
  26. System.out.println(e.getMessage());  
  27. }  
  28. }  

 

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

getByAddress

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

然后,URL地址

URL-class

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

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

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

Java代码 
  1. Void EasyURL (String strURL)  
  2. {  
  3. URL url = new URL(strURL);  
  4. try  
  5. {  
  6. InputStream html = url.openStream ();  
  7. int c;  
  8. do{  
  9. c= html.read();  
  10. cf(c!=-1) System.out.println((char)c);  
  11. }while(c!=-1)  
  12. }  
  13. catch(IOException e)  
  14. {  
  15. System.out.println(e.getMessage());  
  16. }  
  17. }  

 

 

其次,套接字socket类

socket-class

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

Java代码 
  1. void WebPing (String strURL)  
  2. {  
  3. try  
  4. {  
  5. InetAddress addr;  
  6. Socket sock = new Socket(strURL,80);  
  7. Addr = sock.getInetAddress ();  
  8. System.out.println(“Connceted to”+addr);  
  9. Sock.close();  
  10. }  
  11. catch(IOException e)  
  12. {  
  13. System.out.println(e.getMessage());  
  14. }  
  15. }  

 

 

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

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

最后,URLConncetion类

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

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

Java代码 
  1. void SendRequest (String strURL)  
  2. {  
  3. URL url = URL(strURL);  
  4. HttpURLConnection conn = (HttpURLConnection)url.openConnection ();  
  5. conn.setDoInput (true);  
  6. conn.setDoOutput (true);  
  7. conn.setRequestProperty (“Content-type”,”application/xxx”);  
  8. conn.connect ();  
  9. System.out.println(Conn.getResponseMessage ());  
  10. InputMessage is = Conn.getIputStream();  
  11. int c;  
  12. do{  
  13. c = is.read();  
  14. if(c!=-1) System.out.println((char)c);  
  15. }while(c!=-1)  
  16. }  

 

 

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

HTTP-Header

总结说明

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

抱歉!评论已关闭.