中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java之網絡編程的示例分析

發布時間:2021-07-31 11:36:14 來源:億速云 閱讀:110 作者:小新 欄目:開發技術

小編給大家分享一下Java之網絡編程的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Java基礎之網絡編程

基本概念

IP:每個電腦都有一個IP地址,在局域網內IP地址是可變的。

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

式、傳輸速率、傳輸步驟等做了統一規定,通信雙方必須同時遵守,最終完成數據交換。

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

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

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

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

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

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

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

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

構造函數與常用方法

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

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

        如果此Scoket具有相關聯的通道,則生成的InputStream 的所有操作也關聯該通道。 關閉生成的InputStream也將關閉相關的Socket。

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

        如果此Scoket具有相關聯的通道,則生成的OutputStream 的所有操作也關聯該通道。 關閉生成的OutputStream也將關閉相關的Socket。

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

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

客戶端實現步驟--使用Socket

1.創建一個客戶端對象Socket,構造方法綁定服務器的IP地址和端口號

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

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

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

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

6.使用資源(Socket.Close)

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

ServerSocket 類:這個類實現了服務器套接字,該對象等待通過網絡的請求。 構造函數與常用方法

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

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

服務器端實現步驟--使用ServerSocket

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

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

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

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

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

6.使用網絡字節輸出流Outputstream對象中的方法Write,給客戶端回寫數據

7.釋放資源(Socket,ServerSocket)

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

文件上傳練習

客戶端

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

 服務端

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

以上是“Java之網絡編程的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

拉萨市| 鄂伦春自治旗| 琼结县| 金川县| 芮城县| 上犹县| 抚宁县| 东宁县| 安庆市| 西藏| 明星| 册亨县| 临湘市| 渭源县| 云梦县| 盘锦市| 体育| 虞城县| 临汾市| 志丹县| 青阳县| 遵化市| 蓬溪县| 安平县| 岳阳县| 日土县| 凤城市| 大渡口区| 南阳市| 双江| 东台市| 金山区| 炎陵县| 荥阳市| 郯城县| 若尔盖县| 吉隆县| 西和县| 高雄县| 策勒县| 新闻|