javase基礎複習攻略《十》

  按照計劃本篇爲你們總結JAVA的網絡編程,什麼叫網絡編程呢?網絡編程!=網站編程,對於這一點你們必定要注意,不少小朋友都曾經這麼認爲。既然談到網絡編程,我們先了解一下網絡的基礎知識,什麼是計算機網絡?把分佈在不一樣區域的計算機與專門的外部設備用通訊線路互聯成一個規模大、功能強的網絡系統,從而使衆多計算機能夠方便的互相傳遞信息,共享硬盤、軟件、數據信息等資源。編程

  什麼是網絡通訊協議:計算機網絡中實現通訊必須有一些約定即通訊協議,對速率、傳輸代碼、代碼結構、傳輸控制步驟、出錯控制等制定標準。數組

  網絡通訊接口:爲了是兩個節點之間能進行對話,必須在它們之間創建通訊工具(即接口),使彼此之間可以進行信息交換。接口包括兩類:硬件裝置——實現結點之間的信息傳送。軟件裝置——規定雙方進行通訊的約定協議。瀏覽器

  一、網絡分層的參考模型:服務器

  

 二、TCP協議和UDP協議:網絡

  TCP是專門設計用於在不可靠的網絡環境下提供可靠的、端到端的字節流通訊協議。它是一種面向鏈接的協議。框架

  UDP嚮應用程序提供一種發送封裝的原始IP數據報的方法,而且發送時無須創建鏈接。是一種不可靠的鏈接協議。工具

 三、TCP編程:網站

  a、服務器端:spa

public class TestSeriver {

    /**服務器端
     * @param args
     */
    public static void main(String[] args) {
        try {
            //咱們的機器上一個有65526個端口,在咱們設置端口時,儘可能選擇124之後的端口,由於124以前的端口已經被特定的程序設置,例如:80 :瀏覽器地址端口
            ServerSocket ss = new ServerSocket(888);//這裏的888:是咱們爲了方便客戶端的鏈接設置的端口號
            Socket s = ss.accept();//用來接收客戶端的的鏈接,注意這個方法是阻塞式的,也就是說若是沒有客戶端鏈接,程序將會停留在這個位置
            System.out.println("A client connect!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

  a、客戶端:計算機網絡

public class TestClient {

    /**客戶端
     * @param args
     */
    public static void main(String[] args) {
        try {
            Socket s = new Socket("127.0.0.1",888);//在這裏說明一點,"127.0.0.1":使咱們的主機號,888:是咱們須要鏈接的端口號
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

  b、服務器端:

public class TestSeriver1 {

    /**服務器端
     * @param args
     */
    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(999);
            while(true){
                Socket s = ss.accept();
                System.out.println("A client connect!");
                InputStream is = s.getInputStream();
                DataInputStream dis = new DataInputStream(is);
                System.out.println(dis.readUTF());//這裏的readUTF()方法也是阻塞式的,爲了讓看到這個效果我在客戶端輸入的地方添加了一個停頓,已經標註
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  b、客戶端:

public class TestClient1 {

    /**客戶端
     * @param args
     */
    public static void main(String[] args) {
        try {
            Socket s = new Socket("127.0.0.1", 999);
            OutputStream os = s.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            Thread.sleep(3000);//設置停頓三秒鐘,關於這個我在線程的博客裏有說明
            dos.writeUTF("Hello Server!");
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 四、UDP編程實例:

  a、服務器端:

public class TestUDPServer {

    /**服務器端代碼
     * @param args
     * 對於UDP和TCP的端口號,首先咱們能夠任意設置,但必須保證範圍在65536之內
     * UDP和TCP的端口號沒有關聯,也就是說,UDP和TCP各有65536個端口
     */
    public static void main(String[] args) throws Exception{
        byte [] buf = new byte[1024];//設置存放數據的字符數組
        DatagramPacket dp = new DatagramPacket(buf, buf.length);
        DatagramSocket ds = new DatagramSocket(5888);//設置端口號
        while(true){
            ds.receive(dp);//接收客戶端發過來的請求數據
            System.out.println(new String(buf, 0, dp.getLength()));
            //new String(buf, 0, dp.getLength()):String的構造方法,把一個字節數組轉化爲一個String類數據
        }
    }
}

  a、客戶端:

public class TestUDPClient {

    /**客戶端代碼實例
     * @param args
     * SocketAddress:網絡上的地址,不但包括IP,還包括端口號等等
     * InetAddress:IP地址的超級
     * InetSocketAddress:IP地址+端口號
     */
    public static void main(String[] args) throws Exception{
        byte [] buf = new byte[1024];
        buf = (new String("Hello")).getBytes();//將String類型的數據轉換爲字符數組
        DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1",5888));
        DatagramSocket ds = new DatagramSocket(9999);//設置客戶端發送數據的端口號
        ds.send(dp);//向服務器發送數據
        ds.close();
    }
}

  b、服務器端:

public class TestUDPServer1 {

    public static void main(String[] args) throws Exception{
        byte [] buf = new byte[1024];//設置存放數據的字符數組
        DatagramPacket dp = new DatagramPacket(buf, buf.length);
        DatagramSocket ds = new DatagramSocket(5888);//設置端口號
        while(true){
            ds.receive(dp);//接收客戶端發過來的請求數據
            ByteArrayInputStream bais = new ByteArrayInputStream(buf);
            DataInputStream dis = new DataInputStream(bais);
            System.out.println(dis.readLong());
        }
    }
}

  b、客戶端:

public class TestUDPClient1 {

    public static void main(String[] args) throws Exception{
        Long L = 10000L;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);//DataOutputStream:能夠直接寫一個Long類型的數據
        dos.writeLong(L);
        byte [] buf = baos.toByteArray();
        DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1",5888));
        DatagramSocket ds = new DatagramSocket(9999);//設置客戶端發送數據的端口號
        ds.send(dp);//向服務器發送數據
        ds.close();
    }
}

  好了,到這裏就爲你們把JAVA中的網絡編程總結完畢。


  到今天對於JAVASE基礎知識的總結就爲你們分析完畢,必定存在一些問題,還望你們多多指點,再接下來的日子裏,我還爲你們分享JSP、JAVA SSH框架以及Android方面的基礎知識總結,我一直相信,只有把基礎打牢,才能走的更遠,讓咱們一塊兒加油吧。你們若是有什麼好的理念,還望對的指點。

相關文章
相關標籤/搜索