Java基礎網絡編程

      網友投稿 624 2022-05-29

      Java基礎之網絡編程

      基本概念

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

      構造函數與常用方法

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

      ServerSocket 類:這個類實現了服務器套接字,該對象等待通過網絡的請求。

      構造函數與常用方法

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

      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 網絡

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:華為云基于云原生媒體網絡,又出重磅新品
      下一篇:設計一種面向對象腳本語言
      相關文章
      国产亚洲美女精品久久久2020| 亚洲制服丝袜中文字幕| 亚洲日本乱码卡2卡3卡新区| 久久久久亚洲AV无码麻豆| 亚洲成AV人片在线观看| 久久亚洲国产精品一区二区| 伊人久久大香线蕉亚洲| 亚洲综合亚洲综合网成人| 亚洲国产成人精品女人久久久| 婷婷亚洲综合一区二区| 久久亚洲AV成人无码国产最大| 亚洲av无码片vr一区二区三区| 亚洲AV成人无码网天堂| 男人的天堂亚洲一区二区三区 | 亚洲字幕AV一区二区三区四区| 亚洲国产高清美女在线观看| 亚洲伊人久久大香线蕉| 亚洲a∨无码男人的天堂| 国产精品亚洲自在线播放页码| 亚洲乱码在线观看| 亚洲精品色播一区二区| 久久水蜜桃亚洲AV无码精品| 在线观看亚洲视频| 亚洲精品网站在线观看不卡无广告 | 亚洲国产成人资源在线软件| 亚洲成综合人影院在院播放| 亚洲av专区无码观看精品天堂| 久久久国产亚洲精品| 亚洲AV无码之国产精品| 日韩精品电影一区亚洲| 久久亚洲高清综合| 亚洲精品无码不卡在线播HE| 亚洲成人激情在线| 亚洲天堂电影在线观看| 亚洲日本一线产区和二线| 亚洲国产aⅴ综合网| 亚洲色无码专区在线观看| 亚洲一二成人精品区| 亚洲成人免费在线观看| 亚洲人成网站在线播放2019| 免费在线观看亚洲|