1. 程式人生 > >Java基礎知識網路程式設計(瀏覽器&服務端)

Java基礎知識網路程式設計(瀏覽器&服務端)

TCP協議傳輸資料時有客戶端和服務端,客戶端和服務端無非就是基於網路應用的程式而已,生活中,瀏覽器就是一個標準的客戶端。
1演示服務端和瀏覽器:
服務端:
服務端即自己的主機,寫一個服務端的小程式碼:

import java.io.*;
import java.net.*;

class ServerDemo 
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket ss=new ServerSocket(10010);
        Socket s=ss.accept();
        System.out.println(s.getInetAddress().getHostAddress());
        PrintWriter pw=new
PrintWriter(s.getOutputStream(),true); pw.println("客戶端你好"); s.close(); ss.close(); } }

開啟伺服器,輸入網址:http://你的IP地址:設定的埠號 ,便可以連線到自己的主機,並收到“客戶端你好”。
也可以在dos命令列裡輸入:telnet IP:埠
telnet命令是windows提供的遠端登陸的工具,可以訪問網路上任意一臺主機,在dos命令列裡連線,連線成功後,可以對主機進行配置。

2 客戶端是瀏覽器,服務端是Tomcat伺服器
其實Tomcat伺服器就是一個伺服器軟體,是一個純Java編寫的軟體,裡面封裝了 ServerSocket。
bin 目錄下雙擊startup啟動伺服器,埠是8080。
webapps目錄下新建資料夾,用於存放自己的服務.

3 客戶端是瀏覽器,服務端是自己寫的服務
瀏覽器在訪問本地伺服器時發過來:
這裡寫圖片描述

這是瀏覽器發過來的http請求訊息頭。瀏覽器和伺服器是不同廠商製作的,如果瀏覽器想和不同廠商的伺服器進行資料的互動,必須都遵守一些國際標準規則,傳輸層規則則是TCP/IP,而應用層這裡是HTTP協議,

http://192.168.1.6:10000/myweb/demo.html
GET:GET請求方式
myweb/demo.html :表示瀏覽器想要訪問這臺主機的10000埠的myweb路徑下的demo.html這個資源。
HTTP/1.1:指的是協議版本為HTTP 1.1版本
Accept:。。。。。:表示瀏覽器可以支援的檔案型別。
Accept-Language:表示瀏覽器的語言
Accept-Encoding:gzip,deflate:表示支援的資料壓縮的方式。
User-Agent:使用者的資訊
Host:伺服器的哪臺主機
Connection:Keep-alive 保持連線。
在下面是請求的資料體

模擬瀏覽器想Tomcat傳送請求:

import java.io.*;
import java.net.*;
class MyIe 
{
    public static void main(String[] args) throws Exception
    {
        Socket s=new Socket("192.168.1.6",8080);
        PrintWriter pw=new PrintWriter(s.getOutputStream(),true);

        pw.println("GET /myweb/demo.html  HTTP/1.1");
        pw.println("Accept:*/*");
        pw.println("Accept-Language:zh-cn");
        pw.println("Host:192.168.1.6:10000");
        pw.println("Connection:closed");
        pw.println();
        pw.println();

        BufferedReader bufr=new BufferedReader(new InputStreamReader(s.getInputStream()));
        String line=null;
        while((line=bufr.readLine())!=null)
        {
            System.out.println(line);
        }
        s.close();
    }
}

這裡寫圖片描述
Tomcat的WebApps目錄下新建自己的專案myweb,並寫一個demo.html

這裡寫圖片描述

Tomcat伺服器響應請求之後,也會往瀏覽器傳送HTTP應答訊息頭。
如圖中所示,
HTTP/1.1指的是協議版本,200是響應狀態碼錶示請求成功
等等

URL類和URLConnection類

URL類:代表一個統一資源定位符。URL可以分成幾個部分:指定使用的協議(如http),資訊所在的主機(如www.baidu.com),埠(用於建立到遠端主機TCP連線的埠號,如果為未指定埠號,使用協議預設埠,如HTTP預設為80),資訊資源。
例:http://192.168.1.6:8080/myweb/demo.html

構造方法摘要
URL(String spec)
根據 String 表示形式建立 URL 物件。
URL(String protocol, String host, int port, String file)
根據指定 protocol、host、port 號和 file 建立 URL 物件。
URL(String protocol, String host, int port, String file, URLStreamHandler handler)
根據指定的 protocol、host、port 號、file 和 handler 建立 URL 物件。
URL(String protocol, String host, String file)
根據指定的 protocol 名稱、host 名稱和 file 名稱建立 URL。
主要方法:
String getFile()
獲取此 URL 的檔名。
String getHost()
獲取此 URL 的主機名(如果適用)。
String getPath()
獲取此 URL 的路徑部分。
int getPort()
獲取此 URL 的埠號。
String getProtocol()
獲取此 URL 的協議名稱。
String getQuery()
獲取此 URL 的查詢部分。
URLConnection openConnection()
返回一個 URLConnection 物件,它表示到 URL 所引用的遠端物件的連線。

URLConnection類:
抽象類 URLConnection 是所有類的超類,它代表應用程式和 URL 之間的通訊連結。此類的例項可用於讀取和寫入此 URL 引用的資源。
直接已知子類:
HttpURLConnection, JarURLConnection

URLConnection類是將Socket封裝到了內部,並將一些HTTP請求訊息頭和HTTP響應訊息頭的寫入和解析方法也封裝在類中,也就是說將傳輸層的操作轉移到了應用層。所以讀到的資料都是經過拆包之後的。

URL類的openConnection()方法返回一個URLConnection的子類HTTPURLConnection的子類物件。建立物件表示已經與遠端主機建立連線。

OutputStream getOutputStream()
返回寫入到此連線的輸出流。
InputStream getInputStream()
返回從此開啟的連線讀取的輸入流。

例:

import java.io.*;
import java.net.*;

class URLConnectionDemo 
{
    public static void main(String[] args) throws Exception
    {
        String urlpath="http://192.168.1.6:8080/myweb/demo.html";
        URL url=new URL(urlpath);
        URLConnection conn=url.openConnection();

        BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line=null;
        while((line=bufr.readLine())!=null)
        {
            System.out.println(line);
        }

    }
}

這裡寫圖片描述

網路小知識點
DNS:(Domain Name Server)域名解析伺服器。 用於解析網站名和IP地址的對映關係。
當我們在瀏覽器中輸入網址點選連線之後,都做了什麼事情呢?
瀏覽器讀到輸入的網址之後,解析出使用的協議,啟動協議並查詢主機和埠。
想要將主機名翻譯成IP地址,需要進行域名解析,這時就需要DNS。 所以瀏覽器會在公網上找DNS,DNS裡記錄著知名網站的主機名和IP地址的對映關係,查詢到主機名對應的IP之後,返回給瀏覽器,瀏覽器根據IP和埠號連線到主機上。
如果不配置DNS那麼自動走運營商的DNS如電信或者聯通,如果配置DNS那麼走指定DNS。
另外一種情況,如果不走公網,訪問的是http://127.0.0.1:8080 或者http://localhost:8080
其實,127.0.0.1和localhost的對映關係據在本機上,在“c:\windows\systems\drivers\ext\host”
這裡寫圖片描述

瀏覽器通常是先在本地的host檔案中查詢主機名和IP的對映關係,如果沒有再去公網上的DNS上找。
這裡寫圖片描述