2一、Java的網絡編程

軟件結構:java

C/S結構:全稱爲Client/Server結構,是指客戶端和服務器結構,常見程序有QQ等mysql

B/S結構:全稱爲Browser/Server結構,是指瀏覽器和服務器結構,常見瀏覽器有谷歌等sql

 

網絡通訊協議:對數據的傳輸格式、傳輸速率、傳輸步驟等作了統一規定,通訊雙方必須同時遵照才能完成數據交換數據庫

TCP/IP協議:傳輸控制協議/因特網互聯協議,是internet最基本、最普遍的協議。他定義了計算機如何聯入因特網,以及數據如何在它們之間傳輸的標準。他的內部包含一系列的用於處理數據通訊的協議,並採用了4層的分層模型,每一層都呼叫它的下一層所提供的協議完成本身的需求。編程

鏈路層:用於定義物理傳輸通道,一般是對某些網絡鏈接設備的驅動協議,例如針對光纖、網線提供的驅動瀏覽器

網絡層:用於將傳輸的數據進行分組,將分組數據發送到目標計算機或者網絡tomcat

運輸層:主要使網絡程序進行通訊,在進行網絡通訊時,能夠採用TCP協議,也能夠採用UDP協議服務器

應用層:主要負責應用程序的協議,例如HTTP,FTP協議網絡

 

UDP:用戶數據報協議,消耗資源小,通訊效率高,是無鏈接通訊協議,簡單說就是當一臺計算機向另一臺計算機發送數據時,發送端不會確認接收端是否存在,就會發出數據,一樣接收端在收到數據時,也不會向發送端反饋是否收到數據,經常使用於音頻、視頻和普通數據傳輸。oracle

TCP:傳輸控制協議,是面向鏈接的通訊協議,在傳輸數據前要通過「三次握手」 後創建邏輯鏈接,再傳輸數據,他提供了兩臺計算機之間可靠無差錯的數據鏈接,經常使用來下載文件和瀏覽網頁。

 

網絡編程三要素:

一、協議

二、IP地址:互聯網協議地址,用來給一個網絡中的計算機設備作惟一的編號。

    IPv4:一個32位的二進制數,一般被分紅4個字節,表示成a.b.c.d的形式,其中a,b,c,d都是0-255之間的十進制整數,那麼最多能夠表示42億

    IPv6:採用128位地址長度,每16個字節一組,分紅8組十六進制數

    經常使用命令:ipconfig,ping

    特殊IP地址:127.0.0.1,localhost

三、端口號:是一個邏輯端口,咱們沒法直接看到,可使用一些軟件查看端口號

     當咱們使用網絡軟件一打開,那麼操做系統就會位網絡軟件分配一個隨機的端口號或者網絡軟件打開的時候和系統要指定端口號

     端口號是由兩個字節組成,取值範圍在0-65535之間

     注意:1024以前的端口號咱們不能使用,已經被系統分配給已知的網絡軟件

     經常使用端口號:80,網絡端口

                       數據庫:3306,mysql;1521,oracle

                       tomcat服務器:8080

 

TCP通訊程序:TCP通訊能實現兩臺計算機之間的數據交互,通訊兩端要嚴格區分客戶端(Client)和服務端(Server)

兩端通訊時的步驟:一、服務端程序,須要事先啓動,等待客戶端端鏈接

                           二、客戶端主動鏈接服務器端,鏈接成功才能通訊。服務端不能夠主動鏈接客戶端

 

java.net.Socket:此類實現客戶端套接字(也能夠叫「套接字」)。套接字是兩臺機器間通訊的端點

構造方法:Socket(String host , int  port)建立一個流套接字並將其鏈接到指定主機上的指定端口號

               參數:String host:服務器主機的名稱/服務器IP地址

                        int port:服務器的端口號

成員方法:OutputStream getOutputStream ()返回此套接字的輸出流

               InputStream getInputStream()返回此套接字的輸入流

               void close()關閉此套接字

實現步驟:一、建立一個客戶端對象Socket,構造方法綁定服務器的IP地址和端口號

               二、使用Socket對象中的方法getOutputStream()獲取網絡字節輸出流OutputStream對象

               三、使用網絡字節輸出流的OutputStream對象中的方法write,給服務器發送數據

               四、使用socket對象中的方法getInputStream()獲取網絡字節輸入流InputStream對象

               五、使用網絡字節輸入流InputStream對象中的方法read,讀取服務器回寫的數據

               六、釋放資源

注意:一、客戶端和服務器進行交互,必須使用Socket中提供的網絡流,不能使用本身建立的流對象

         二、當咱們建立客戶端對象Socket的時候,就會去請求服務器和服務器通過3次握手創建鏈接通路

              這是若是服務器沒有啓動,就會拋出異常

              若是服務器已經啓動,那麼就能夠進行交互

 

java.net.ServerSocket:此類實現服務器套接字

構造方法:ServerSocket(int port)建立綁定到特定端口的服務器套接字

服務器端必須明確一件事情,必須得知道是哪一個客戶端請求的服務器

因此可以使用accept方法獲取到請求的客戶端對象Socket

成員方法:Socket accept()偵聽並接受到此套接字的鏈接

服務器實現步驟:一、建立服務器ServerSocket對象和系統要指定的端口號

                        二、使用ServerSocket對象中的方法accept,獲取到請求的客戶端對象Socket

                        三、使用Socket對象中的方法getInputStream()獲取網絡字節輸入流InputStream對象

                        四、使用網絡字節輸入流InputStream中的方法read,讀取客戶端發送的數據

                       五、使用Socket對象中的方法getOutputStream()獲取網絡字節輸出流OutputStream對象

                       六、使用網絡字節輸出流OutputStream對象中的方法write給客戶端回寫數據

                       七、釋放資源

 

文件傳輸示例代碼:

public class Demo {

    public static void main(String[] args)throws  Exception {
        ServerSocket serverSocket = new ServerSocket(8888);
        Socket clientSocket = new Socket("127.0.0.1",8888);
        File file =new File("c/a.txt");
        FileInputStream fis = new FileInputStream(file);
        OutputStream os=clientSocket.getOutputStream();
        int len = 0;
        byte[] bytes = new byte[1024];

        while ((len=fis.read(bytes))!=-1){
            //System.out.println(len);
            byte[] wri=Arrays.copyOf(bytes,len);
            os.write(wri);
        }

        Socket socket = serverSocket.accept();
        InputStream inputStream = socket.getInputStream();
        byte[] buffer =new byte[1024];
        int len1= 0;
        while ((len1=inputStream.read(buffer))!=-1){
            String str = new String(Arrays.copyOf(buffer,len1),0,len1,"UTF-8");
            System.out.println(str);
        }

        fis.close();
        socket.close();



    }
相關文章
相關標籤/搜索