最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java之網(wǎng)絡編程案例講解

 更新時間:2021年07月28日 11:30:03   作者:小小張自由—>張有博  
這篇文章主要介紹了Java之網(wǎng)絡編程案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

Java基礎之網(wǎng)絡編程

基本概念

IP:每個電腦都有一個IP地址,在局域網(wǎng)內(nèi)IP地址是可變的。

網(wǎng)絡通信協(xié)議:通信協(xié)議是對計算機必須遵守的規(guī)則,只有遵守這些規(guī)則,計算機之間才能進行通信。這就好比在道路中行駛的汽車一定要遵守交通規(guī)則一樣,協(xié)議中對數(shù)據(jù)的傳輸格

式、傳輸速率、傳輸步驟等做了統(tǒng)一規(guī)定,通信雙方必須同時遵守,最終完成數(shù)據(jù)交換。

TCP協(xié)議(傳輸控制協(xié)議):是面向連接的傳輸層協(xié)議,應用程序在使用TCP之前,必須先建立TCP連接,在傳輸數(shù)據(jù)完畢后,必須釋放已經(jīng)建立的連接(跟打電話是否類似)。TCP可以保證從一端將數(shù)據(jù)傳送至連接的另一端時,數(shù)據(jù)能夠準確送達,而且送到的數(shù)據(jù)的排列順序和送出時的順序相同。

UDP協(xié)議(用戶數(shù)據(jù)報協(xié)議):是無連接的通信協(xié)議,不保證可靠的數(shù)據(jù)傳輸,但能夠向若干個目標發(fā)送數(shù)據(jù),接收發(fā)自若干個源的數(shù)據(jù)。(在線影片,下載文件)。

端口(Port):如果把IP地址比作一間房子 ,端口就是出入這間房子的門。

套接字(Socket)用于將應用程序與端口連接起來,類似于連接電器與電線的插座。

在Java中,提供了兩個類用于實現(xiàn)TCP通信程序:

1.客戶端:java.net.Socket類表示。創(chuàng)建Socket對象,向服務端發(fā)送連接請求,服務端相應請求,兩者建立連接開始通信。

2.服務端:java.net.ServerSocket 類表示。創(chuàng)建 ServerSocket 對象,相當于開啟一個服務,并等待客戶端的連接。

Socket 類:該類實現(xiàn)客戶端套接字,套接字指的是兩臺設備之間通訊的端點。

構(gòu)造函數(shù)與常用方法

public Socket(String host, int port) :創(chuàng)建套接字對象并將其連接到指定主機上的指定端口號。如果指定的host是null ,則相當于指定地址為回送地址。

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

        如果此Scoket具有相關(guān)聯(lián)的通道,則生成的InputStream 的所有操作也關(guān)聯(lián)該通道。 關(guān)閉生成的InputStream也將關(guān)閉相關(guān)的Socket。

public OutputStream getOutputStream() : 返回此套接字的輸出流。

        如果此Scoket具有相關(guān)聯(lián)的通道,則生成的OutputStream 的所有操作也關(guān)聯(lián)該通道。 關(guān)閉生成的OutputStream也將關(guān)閉相關(guān)的Socket。

public void close() :關(guān)閉此套接字。 一旦一個socket被關(guān)閉,它不可再使用。 關(guān)閉此socket也將關(guān)閉相關(guān)的InputStream和OutputStream 。

public void shutdownOutput() : 禁用此套接字的輸出流。 任何先前寫出的數(shù)據(jù)將被發(fā)送,隨后終止輸出流

客戶端實現(xiàn)步驟--使用Socket

1.創(chuàng)建一個客戶端對象Socket,構(gòu)造方法綁定服務器的IP地址和端口號

2.使用Socket對象中的方法getOutputStream()獲取網(wǎng)絡字節(jié)輸出流OutputStream對象

3.使用網(wǎng)絡字節(jié)輸出流OutputStream對象中的方法write,給服務器發(fā)送數(shù)據(jù)

4.使用Socket對象中的方法getInputStream()獲取網(wǎng)絡字節(jié)輸入流InputStream對象

5.使用網(wǎng)絡字節(jié)輸入流InputStream對象中方法read,讀取服務器回寫的數(shù)據(jù)

6.使用資源(Socket.Close)

  public static void main(String[] args) throws IOException {
        //1.創(chuàng)建一個客戶端對象Socket,構(gòu)造方法綁定服務器的IP地址和端口號
        Socket socket = new Socket("127.0.0.1",8888);
        //2.使用Socket對象中的方法getOutputStream()獲取網(wǎng)絡字節(jié)輸出流OutputStream對象
        OutputStream os = socket.getOutputStream();
        //3.使用網(wǎng)絡字節(jié)輸出流OutputStream對象中的方法write,給服務器發(fā)送數(shù)據(jù)
        os.write("你好服務器".getBytes());
        //4.使用Socket對象中的方法getInputStream()獲取網(wǎng)絡字節(jié)輸入流InputStream對象
        InputStream is = socket.getInputStream();
        //5.使用網(wǎng)絡字節(jié)輸入流InputStream對象中方法read,讀取服務器回寫的數(shù)據(jù)
        byte[] bytes = new byte[1024];
        int len = is.read(bytes);
        System.out.println(new String(bytes,0,len));
        //6.使用資源(Socket.Close)
        socket.close();
    }

ServerSocket 類:這個類實現(xiàn)了服務器套接字,該對象等待通過網(wǎng)絡的請求。 構(gòu)造函數(shù)與常用方法

public ServerSocket(int port) :使用該構(gòu)造方法在創(chuàng)建ServerSocket對象時,就可以將其綁定到一個指定的端口號上,參數(shù)port就是端口號。

public Socket accept() :偵聽并接受連接,返回一個新的 Socket 對象,用于和客戶端實現(xiàn)通信。該方法會一直阻塞直到建立連接。

服務器端實現(xiàn)步驟--使用ServerSocket

1.使用服務器ServerSocket對象和系統(tǒng)要指定的端口號

2.使用ServerSocket對象中的方法accept,獲取到請求的客戶端對象socket

3.使用Socket對象中的getInputStream()獲取網(wǎng)絡字節(jié)輸入流Inputstream對象

4.使用網(wǎng)絡字節(jié)輸入流InputStream對象中方法read,讀取客戶端發(fā)送的數(shù)據(jù)

5.使用Socket對象中的方法getOutputStream()獲取網(wǎng)絡字節(jié)輸出流OutputStream對象

6.使用網(wǎng)絡字節(jié)輸出流Outputstream對象中的方法Write,給客戶端回寫數(shù)據(jù)

7.釋放資源(Socket,ServerSocket)

 public static void main(String[]args)throws IOException{
        //1.使用服務器ServerSocket對象和系統(tǒng)要指定的端口號
        ServerSocket server=new ServerSocket(8888);
        //2.使用ServerSocket對象中的方法accept,獲取到請求的客戶端對象socket
        Socket socket=server.accept();
        //3.使用Socket對象中的getInputStream()獲取網(wǎng)絡字節(jié)輸入流Inputstream對象
        InputStream is=socket.getInputStream();
        //4..使用網(wǎng)絡字節(jié)輸入流InputStream對象中方法read,讀取客戶端發(fā)送的數(shù)據(jù)
        byte[]bytes=new byte[1024];
        int len=is.read(bytes);
        System.out.println(new String(bytes,0,len));
        //5.使用Socket對象中的方法getOutputStream()獲取網(wǎng)絡字節(jié)輸出流OutputStream對象
        OutputStream os=socket.getOutputStream();
        //6.使用網(wǎng)絡字節(jié)輸出流Outputstream對象中的方法Write,給客戶端回寫數(shù)據(jù)
        os.write("收到謝謝".getBytes());
        //7.釋放資源(Socket,ServerSocket)
        server.close();
        socket.close();
    }

文件上傳練習

客戶端

 public static void main(String[]args)throws IOException{
        //1.創(chuàng)建一個本地字節(jié)輸入流FileInputStream對象,構(gòu)造方法中綁定要讀取的數(shù)據(jù)源
        FileInputStream fis=new FileInputStream("c:\\1.jpg");
        //2.創(chuàng)建一個客戶端Socket對象,構(gòu)造方法中綁定服務器的IP地址和端口號
        Socket socket=new Socket("127.0.0.1",8888);
        //3.使用Socket中的方法getOutputStream,獲取網(wǎng)絡字節(jié)輸出流OutputStream對象
        OutputStream os=socket.getOutputStream();
        //4.使用本地字節(jié)輸入流FileInputStream對象中的方法read,讀取本地文件
        int len=0;
        byte[]bytes=new byte[1024];
        while((len=fis.read(bytes))!=-1){
            //5.使用網(wǎng)絡字節(jié)輸出流OutputStream對象中的方法write,把讀取到的文件上傳到服務器
            os.write(bytes,0,len);
        }
 
        /*
        解決:上傳完文件,給服務器寫一個結(jié)束標記
        voidshutdownOutput()禁用此套接字的輸出流。
        對于TCP套接字,任何以前寫入的數(shù)據(jù)都將被發(fā)送,并且后跟TCP的正常連接終止序列。
        */
        socket.shutdownOutput();
 
        //6.使用Socket中的方法getInputStream,獲取網(wǎng)絡字節(jié)輸入流InputStream對象
        InputStream is=socket.getInputStream();
 
        System.out.println("333333333333333333333");
 
        //7.使用網(wǎng)絡字節(jié)輸入流InputStream對象中的方法read讀取服務回寫的數(shù)據(jù)
        while((len=is.read(bytes))!=-1){
            System.out.println(new String(bytes,0,len));
        }
 
        System.out.println("444444444444444444while死循環(huán)打印不到");
 
        //8.釋放資源(FileInputStream,Socket)
        fis.close();
        socket.close();
    }

 服務端

 public static void main(String[]args)throws IOException{
        //1.創(chuàng)建一個服務器ServerSocket對象,和系統(tǒng)要指定的端口號
        ServerSocket server=new ServerSocket(8888);
        //2.使用ServerSocket對象中的方法accept,獲取到請求的客戶端Socket對象
        Socket socket=server.accept();
        //3.使用Socket對象中的方法getInputStream,獲取到網(wǎng)絡字節(jié)輸入流InputStream對象
        InputStream is=socket.getInputStream();
        //4.判斷d:\\upload文件夾是否存在,不存在則創(chuàng)建
        File file=new File("d:\\upload");
        if(!file.exists()){
            file.mkdirs();
        }
 
 
        //5.創(chuàng)建一個本地字節(jié)輸出流FileOutputStream對象,構(gòu)造方法中綁定要輸出的目的地
        FileOutputStream fos=new FileOutputStream(file+"\\1.jpg");
        //6.使用網(wǎng)絡字節(jié)輸入流InputStream對象中的方法read,讀取客戶端上傳的文件
 
        System.out.println("11111111111111111111");
 
        int len=0;
        byte[]bytes=new byte[1024];
        while((len=is.read(bytes))!=-1){
            //7.使用本地字節(jié)輸出流FileOutputStream對象中的方法write,把讀取到的文件保存到服務器的硬盤上
            fos.write(bytes,0,len);
        }
 
        System.out.println("22222222222222222222222while死循環(huán)打印不到");
 
        //8.使用Socket對象中的方法getOutputStream,獲取到網(wǎng)絡字節(jié)輸出流OutputStream對象
        //9.使用網(wǎng)絡字節(jié)輸出流OutputStream對象中的方法write,給客戶端回寫"上傳成功"
        socket.getOutputStream().write("上傳成功".getBytes());
        //10.釋放資源(FileOutputStream,Socket,ServerSocket)
        fos.close();
        socket.close();
        server.close();
    }

到此這篇關(guān)于Java之網(wǎng)絡編程案例講解的文章就介紹到這了,更多相關(guān)Java之網(wǎng)絡編程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項目使用slf4j的MDC日志打點功能(最新推薦)

    SpringBoot項目使用slf4j的MDC日志打點功能(最新推薦)

    這篇文章主要介紹了SpringBoot項目使用slf4j的MDC日志打點功能,本文通過示例代碼給大家介紹非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • java讀取Excel導入去除空行簡單方法

    java讀取Excel導入去除空行簡單方法

    這篇文章主要給大家介紹了關(guān)于java讀取Excel導入去除空行的簡單方法,在日常開發(fā)中,想必都遇到過批處理的需求,文中給出了詳細的示例代碼,需要的朋友可以參考下
    2023-07-07
  • SpringBoot+Ajax+redis實現(xiàn)隱藏重要接口地址的方法

    SpringBoot+Ajax+redis實現(xiàn)隱藏重要接口地址的方法

    這篇文章主要介紹了SpringBoot+Ajax+redis實現(xiàn)隱藏重要接口地址,本篇文章主要講訴使用SpringBoot項目配合Ajax和redis實現(xiàn)隱藏重要接口地址,這里我以隱藏秒殺地址為例,需要的朋友可以參考下
    2024-03-03
  • Spring boot 打jar包分離lib的正確配置方式

    Spring boot 打jar包分離lib的正確配置方式

    spring boot打jar包分離lib后,配置文件的方式,在網(wǎng)上可以搜到很多答案,但是都不夠完善,今天小編給大家?guī)砹薙pring boot 打jar包分離lib的正確配置方式,感興趣的朋友一起看看吧
    2018-02-02
  • java異步寫日志到文件中實現(xiàn)代碼

    java異步寫日志到文件中實現(xiàn)代碼

    這篇文章主要介紹了java異步寫日志到文件中實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • java 實現(xiàn)截取字符串并按字節(jié)分別輸出實例代碼

    java 實現(xiàn)截取字符串并按字節(jié)分別輸出實例代碼

    這篇文章主要介紹了java 實現(xiàn)截取字符串并按字節(jié)分別輸出實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 聊聊Object類中的wait()和notify()方法

    聊聊Object類中的wait()和notify()方法

    這篇文章主要介紹了Object類中的wait()和notify()方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 基于Maven導入pom依賴很慢的解決方案

    基于Maven導入pom依賴很慢的解決方案

    這篇文章主要介紹了Maven導入pom依賴很慢的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 打開IDEA配置Spring項目時發(fā)現(xiàn)沒有選擇java?1.8的選項解決方案

    打開IDEA配置Spring項目時發(fā)現(xiàn)沒有選擇java?1.8的選項解決方案

    這篇文章主要介紹了打開IDEA配置Spring項目時發(fā)現(xiàn)沒有選擇java?1.8的選項的解決方案,文中通過代碼介紹的非常詳細,對大家學習或者idea具有一定的參考借鑒價值,需要的朋友可以參考下
    2025-03-03
  • Java并發(fā)工具類Future使用示例

    Java并發(fā)工具類Future使用示例

    這篇文章主要介紹了Java并發(fā)工具類Future使用示例,本文需要注意future.get()方法是阻塞式的,如果調(diào)用該方法的時候任務尚未執(zhí)行完成,則會一直等待下去,直到任務執(zhí)行結(jié)束,本文通過示例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2022-06-06

最新評論

苏尼特左旗| 湟中县| 河南省| 黑山县| 八宿县| 江孜县| 南华县| 肥东县| 凌云县| 镇赉县| 谢通门县| 台江县| 安溪县| 永仁县| 和田市| 河北省| 襄垣县| 巴彦淖尔市| 元朗区| 邯郸县| 长海县| 壶关县| 塘沽区| 和静县| 柳州市| 丰都县| 三明市| 望奎县| 子洲县| 西林县| 句容市| 岗巴县| 南江县| 于都县| 江城| 三门峡市| 易门县| 曲阜市| 大连市| 衡阳市| 钦州市|