JavaSE基礎複習:網路編程

來源:互聯網
上載者:User

  ------- android培訓、java培訓、期待與您交流! ----------  

網路模型:OSI參考模型,TCP/IP參考模型;TCP/IP參考模型:

    應用程式層
    傳輸層(TCP/UDP)
    網路層(IP層)
    物理層和資料連結層

InetAddress類
public class InetAddressTest{public static void main(String[] args)throws Exception{// 根據主機名稱來擷取對應的InetAddress執行個體InetAddress ip = InetAddress.getByName("www.baidu.com");// 判斷是否可達System.out.println("百度:" + ip.toString() + " : "+ip.isReachable(5000));// 擷取該InetAddress執行個體的IP字串System.out.println(ip.getCanonicalHostName());System.out.println(ip.getHostName());System.out.println(ip.getHostAddress());// 根據原始IP地址來擷取對應的InetAddress執行個體//InetAddress local = InetAddress.getByAddress(new byte[]{127,0,0,1});InetAddress local = InetAddress.getLocalHost();System.out.println("本機是否可達:" + local.isReachable(2000)+ " : " + local.getHostAddress()); // 擷取該InetAddress執行個體對應的全限定網域名稱System.out.println(local.getCanonicalHostName());}}

運行結果是:
百度:www.baidu.com/61.135.169.125 : false
61.135.169.125
www.baidu.com
61.135.169.125
本機是否可達:true : 192.168.1.66
ACERCN---//---本機是否可達:true : 127.0.0.1-------localhost
UDP不是連線導向的1、發送端

byte[] buf = "UDP發送端".getBytes();DatagramPacket dpSent = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),30000);DatagramSocket ds = new DatagramSocket();ds.sent(dpSent);ds.close();
2、接收端
DatagramSocket ds = new DatagramSocket(30000);//接收端需要指定連接埠byte[] buf = new byte[4*1024];DatagramPacket dpRece = new DatagramPacket(buf,buf.length);ds.receive(dpRece);byte[] bufRece = dpRece.getData();System.out.println(new String(bufRece));

廣播位址:192.168.1.255
TCP用戶端和服務端Socket

用戶端代碼:

Socket s = new Socket("192.168.1.66",9999);OutputStream out = s.getOutputStream();
ServerSocket

服務端代碼:

ServerSocket ss = new ServerSocket(9999);Socket s = ss.accept();InputStream in = s.getInputStream();OutputStream out = s.getOutputStream();
URLDecoder和URLEncoder

application/x-www-form-urlencoded MIME 格式轉換

String key = URLEncoder.encode("黑馬Java程式員","gbk");//---%BA%DA%C2%EDJava%B3%CC%D0%F2%D4%B1String keyWord = URLDecoder.decode("%BA%DA%C2%EDJava%B3%CC%D0%F2%D4%B1","gbk");//---黑馬Java程式員
UEL和URI

URL:統一資源定位器
URI:統一資源識別項
URL的格式由下列三部分組成  

第一部分是協議或稱為服務方式httpshttpftp 
第二部分是存有該資源的主機IP地址和連接埠號碼省略為80 
第三部分是主機資源的具體地址。如目錄和檔案名稱等。  
第一部分和第二部分之間用“//”符號隔開
第二部分和第三部分用“/”符號隔開。
第一部分和第二部分是不可缺少的第三部分有時可以省略。

 URL和URLConnection

URL和URI之間可以通過URL.toURI()和URI.toURL()相互轉換。
URL類可以通過建構函式得到一個URL執行個體,並提供了一系列getXxx方法,擷取資源的各部分資訊。
URL執行個體可以通過url.openStream()方法開啟到此 URL 的串連並返回一個用於從該串連讀入的 InputStream。
URLConnection類執行個體可以通過url.openConnection()方法獲得,通過URLConnection執行個體可以擷取關聯url的輸入和輸出。

URLConnection conn = url.openConnection();conn.setRequestProperty(key,value);conn.getInputStream();conn.getOutputStream();Map<String,List<String>> map = conn.getRequestProperties(); //返回一個由此串連的一般請求屬性構成的不可修改的 Map。Map<String,List<String>> map = conn.getHeaderFields(); //返回頭欄位的不可修改的 Map。 
URL舉例:
public class URLDemo {public static void main(String[] args) throws IOException {String str_url = "http://192.168.1.66:8080/myweb/1.html";URL url = new URL(str_url);//System.out.println("getProtocol:"+url.getProtocol());//System.out.println("getHost:"+url.getHost());//System.out.println("getPort:"+url.getPort());//System.out.println("getFile:"+url.getFile());//System.out.println("getPath:"+url.getPath());//System.out.println("getQuery:"+url.getQuery());//InputStream in = url.openStream();//擷取url對象的Url連接器對象。URLConnection conn = url.openConnection();//String value = conn.getHeaderField("Content-Type");//System.out.println(value);//System.out.println(conn);//輸出sun.net.www.protocol.http.HttpURLConnection:http://192.168.1.100:8080/myweb/1.htmlInputStream in = conn.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String text = new String(buf,0,len);System.out.println(text);in.close();}}
用戶端和服務端原理

最常見的用戶端:
瀏覽器 :IE。
最常見的服務端:
伺服器:Tomcat。

自訂服務端,使用已有的用戶端IE,瞭解一下用戶端給服務端發了什麼請求?發送的請求是:

GET /myweb/1.html HTTP/1.1  請求的資源路徑   http協議版本。
請求訊息頭 . 屬性名稱:屬性值
Accept: */*     
Accept-Language: zh-cn,zu;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)
Host: 192.168.1.66:9090
Connection: Keep-Alive
//空行
//請求體。

//服務端發回應答訊息。

HTTP/1.1 200 OK   //應答行,http的協議版本   應答狀態代碼   應答狀態原因資訊
應答訊息屬性資訊。 屬性名稱:屬性值
Server: Apache-Coyote/1.1
ETag: W/"199-1323480176984"
Last-Modified: Sat, 10 Dec 2011 01:22:56 GMT
Content-Type: text/html
Content-Length: 199
Date: Fri, 11 May 2012 07:51:39 GMT
Connection: close
//空行
//應答體。

網路結構,1,C/S  client/server

特點:
該結構的軟體,用戶端和服務端都需要編寫。
可發成本較高,維護較為麻煩。
好處:
用戶端在本地可以分擔一部分運算。
2,B/S  browser/server

特點:
該結構的軟體,只程式開發伺服器端,不開發用戶端,因為用戶端直接由瀏覽器取代。 
開發成本相對低,維護更為簡單。
缺點:所有運算都要在服務端完成。

------- android培訓、java培訓、期待與您交流! ----------

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.