日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java练气期(3)----java高级(网络编程)

發布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java练气期(3)----java高级(网络编程) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是java的網絡編程

Socket 編程套接字使用TCP提供了兩臺計算機之間的通信機制。 客戶端程序創建一個套接字,并嘗試連接服務器的套接字。

當連接建立時,服務器會創建一個 Socket 對象。客戶端和服務器現在可以通過對 Socket 對象的寫入和讀取來進行通信。

TCP通信:面向連接的通信,客戶端和服務器端必須經過3次握手,建立邏輯連接,才能通信(安全)

通信步驟:

  • 服務器端先啟動
  • 服務器端不會主動請求客戶端
  • 必須使用客戶端請求服務器端
  • 客戶端和服務器端就會建立一個邏輯連接
  • 而這個連接中包含一個對象,這個對象就是IO對象
  • 客戶端和服務器端就可以使用IO對象進行通信

服務器端必須明確兩件事情:

1.多個客戶端同時和服務器進行交互,服務器必須明確和那個客戶端進行交互

  • 在服務器端有一個方法,叫accept客戶端獲取到請求的客戶端對象

2.多個客戶端同時和服務器進行交互,就需要使用多個IO流對象

  • 服務器是沒有IO流的,服務器可以獲取到請求的客戶端對象Socket
  • 使用每個客戶端Socket中提供的IO流和客戶端進行交互
  • 服務器使用客戶端的字節輸入流讀取客戶端發送的數據
  • 服務器使用客戶端的字節輸出流給客戶端回寫數據

?

流程圖

?

代碼示例

服務器端

import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Random;/*文件上傳案例服務器端:讀取客戶端上傳的文件,保存到服務器的硬盤,給客戶端回寫"上傳成功"明確:數據源:客戶端上傳的文件目的地:服務器的硬盤 d:\\upload\\1.jpg實現步驟:1.創建一個服務器ServerSocket對象,和系統要指定的端口號2.使用ServerSocket對象中的方法accept,獲取到請求的客戶端Socket對象3.使用Socket對象中的方法getInputStream,獲取到網絡字節輸入流InputStream對象4.判斷d:\\upload文件夾是否存在,不存在則創建5.創建一個本地字節輸出流FileOutputStream對象,構造方法中綁定要輸出的目的地6.使用網絡字節輸入流InputStream對象中的方法read,讀取客戶端上傳的文件7.使用本地字節輸出流FileOutputStream對象中的方法write,把讀取到的文件保存到服務器的硬盤上8.使用Socket對象中的方法getOutputStream,獲取到網絡字節輸出流OutputStream對象9.使用網絡字節輸出流OutputStream對象中的方法write,給客戶端回寫"上傳成功"10.釋放資源(FileOutputStream,Socket,ServerSocket)*/ public class TCPServer {public static void main(String[] args) throws IOException {//1.創建一個服務器ServerSocket對象,和系統要指定的端口號ServerSocket server = new ServerSocket(8888);//2.使用ServerSocket對象中的方法accept,獲取到請求的客戶端Socket對象/*讓服務器一直處于監聽狀態(死循環accept方法)有一個客戶端上傳文件,就保存一個文件*/while(true){Socket socket = server.accept();/*使用多線程技術,提高程序的效率有一個客戶端上傳文件,就開啟一個線程,完成文件的上傳*/new Thread(new Runnable() {//完成文件的上傳@Overridepublic void run() {try {//3.使用Socket對象中的方法getInputStream,獲取到網絡字節輸入流InputStream對象InputStream is = socket.getInputStream();//4.判斷d:\\upload文件夾是否存在,不存在則創建File file = new File("d:\\upload");if(!file.exists()){file.mkdirs();}/*自定義一個文件的命名規則:防止同名的文件被覆蓋規則:域名+毫秒值+隨機數*/String fileName = "itcast"+System.currentTimeMillis()+new Random().nextInt(999999)+".jpg";//5.創建一個本地字節輸出流FileOutputStream對象,構造方法中綁定要輸出的目的地//FileOutputStream fos = new FileOutputStream(file+"\\1.jpg");FileOutputStream fos = new FileOutputStream(file+"\\"+fileName);//6.使用網絡字節輸入流InputStream對象中的方法read,讀取客戶端上傳的文件int len =0;byte[] bytes = new byte[1024];while((len = is.read(bytes))!=-1){//7.使用本地字節輸出流FileOutputStream對象中的方法write,把讀取到的文件保存到服務器的硬盤上fos.write(bytes,0,len);}//8.使用Socket對象中的方法getOutputStream,獲取到網絡字節輸出流OutputStream對象//9.使用網絡字節輸出流OutputStream對象中的方法write,給客戶端回寫"上傳成功"socket.getOutputStream().write("上傳成功".getBytes());//10.釋放資源(FileOutputStream,Socket,ServerSocket)fos.close();socket.close();}catch (IOException e){System.out.println(e);}}}).start();}//服務器就不用關閉//server.close();} }

客戶端

import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket;/*文件上傳案例的客戶端:讀取本地文件,上傳到服務器,讀取服務器回寫的數據明確:數據源:c:\\1.jpg目的地:服務器實現步驟:1.創建一個本地字節輸入流FileInputStream對象,構造方法中綁定要讀取的數據源2.創建一個客戶端Socket對象,構造方法中綁定服務器的IP地址和端口號3.使用Socket中的方法getOutputStream,獲取網絡字節輸出流OutputStream對象4.使用本地字節輸入流FileInputStream對象中的方法read,讀取本地文件5.使用網絡字節輸出流OutputStream對象中的方法write,把讀取到的文件上傳到服務器6.使用Socket中的方法getInputStream,獲取網絡字節輸入流InputStream對象7.使用網絡字節輸入流InputStream對象中的方法read讀取服務回寫的數據8.釋放資源(FileInputStream,Socket)*/ public class TCPClient {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);}/*解決:上傳完文件,給服務器寫一個結束標記void shutdownOutput() 禁用此套接字的輸出流。對于 TCP 套接字,任何以前寫入的數據都將被發送,并且后跟 TCP 的正常連接終止序列。*/socket.shutdownOutput();//6.使用Socket中的方法getInputStream,獲取網絡字節輸入流InputStream對象InputStream is = socket.getInputStream();//7.使用網絡字節輸入流InputStream對象中的方法read讀取服務回寫的數據while((len = is.read(bytes))!=-1){System.out.println(new String(bytes,0,len));}//8.釋放資源(FileInputStream,Socket)fis.close();socket.close();} }

?

?

?

總結

以上是生活随笔為你收集整理的java练气期(3)----java高级(网络编程)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。