Java——网络编程练习
生活随笔
收集整理的這篇文章主要介紹了
Java——网络编程练习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
練習一(黑馬程序員面試題):客戶端向服務器寫字符串(鍵盤錄入),服務器(多線程)將字符串反轉后寫回,客戶端再次讀取到的是反轉后的字符串
相關代碼如下:
package com.wsq.test;import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner;public class Test1_Client { /*** 客戶端向服務器寫字符串(鍵盤錄入),服務器(多線程)將字符串反轉后寫回,客戶端再次讀取到的是反轉后的字符串* @throws IOException * @throws UnknownHostException * * * */public static void main(String[] args) throws UnknownHostException, IOException {Scanner sc = new Scanner(System.in); //創建鍵盤錄入對象Socket wsq = new Socket("192.168.1.182",1014); //創建Socket客戶端,指定IP地址和端口號(不超過65535即可)BufferedReader br = new BufferedReader(new InputStreamReader(wsq.getInputStream())); //獲取輸入流PrintStream ps = new PrintStream(wsq.getOutputStream()); //獲取輸出流//對getInputStream()和getOutputStream()進行包裝ps.println(sc.nextLine()); //客戶端將字符串(鍵盤錄入)寫到服務器去System.out.println(br.readLine()); //將反轉后的結果讀出來wsq.close(); //只需要關Socket就行(wsq是Socket對象)//public void close()throws IOException //關閉此套接字也將會關閉該套接字的 InputStream 和 OutputStream。 //也就是說,只要把Socket關閉,InputStream和OutputStream也會關閉}} package com.wsq.test;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket;public class Test2_Server {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(1014);//創建多線程服務器//public ServerSocket(int port)throws IOException創建綁定到特定端口的服務器套接字。端口 0 在所有空閑端口上創建套接字。//參數:port - 端口號;或者為 0,表示使用任何空閑端口。 System.out.println("服務器已啟動,已綁定1014端口");//輸出一句提示語句while(true){ //不斷地接收客戶端的請求final Socket wsq = server.accept(); //接收客戶端的請求//public Socket accept()throws IOException偵聽并接受到此套接字的連接。//返回:新套接字 //匿名內部類所用到的局部變量必須被final修飾new Thread(){ //運用匿名內部類,來開啟一條線程public void run(){ //重寫Thread()這個(線程)抽象類里面的run方法try {BufferedReader br = new BufferedReader(new InputStreamReader(wsq.getInputStream())); //獲取輸入流PrintStream ps = new PrintStream(wsq.getOutputStream()); //獲取輸出流//客戶端將內容給發送到服務端//再對getInputStream()和getOutputStream()方法進行包裝String line = br.readLine(); //將客戶端寫過來的數據讀取出來line = new StringBuilder(line).reverse().toString(); //鏈式編程//line = new StringBuilder(line)先把line封裝成一個StringBuilder對象,變成一個緩沖區 //再.reverse(),進行反轉(倒序)//然后再.toString()將數據轉化成字符串ps.println(line); //把反轉后的內容給寫回去,然后再在Client(客戶端)把寫出來的數據給讀出來//服務端進行將客戶端發送的數據進行給讀寫出來wsq.close(); //只需要關Socket就行(wsq是Socket對象)//public void close()throws IOException //關閉此套接字也將會關閉該套接字的 InputStream 和 OutputStream。 //也就是說,只要把Socket關閉,InputStream和OutputStream也會關閉} catch (Exception e) {e.printStackTrace();}}}.start();}}}練習二(黑馬程序員面試題):客戶端向服務器上傳文件
相關步驟如下:* 1,提示輸入要上傳的文件路徑,驗證路徑是否存在以及是否是文件夾* 2,發送文件名到服務器* 3,建立多線程的服務器* 4,讀取文件名* 5,判斷文件是否存在,將結果發回客戶端* 6,接收結果,如果存在給予提示,程序直接退出* 7,如果不存在,定義FileInputStream讀取文件,寫出到網絡* 8,定義FileOutputStream,從網絡讀取數據,存儲到本地相關代碼如下:
package com.wsq.test;import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner;public class Test1_UpdateClient { /*** * 客戶端向服務器上傳文件* * * 1,提示輸入要上傳的文件路徑,驗證路徑是否存在以及是否是文件夾* 2,發送文件名到服務器* 6,接收結果,如果存在給予提示,程序直接退出* 7,如果不存在,定義FileInputStream讀取文件,寫出到網絡* @throws IOException * @throws UnknownHostException * * * */public static void main(String[] args) throws UnknownHostException, IOException { //1,提示輸入要上傳的文件路徑,驗證路徑是否存在以及是否是文件夾File file = getFile(); //2,發送文件名到服務器Socket socket = new Socket("192.168.1.182",1014);BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintStream ps = new PrintStream(socket.getOutputStream()); //創建輸出流ps.println(file.getName()); //把文件名發送給服務端 //6,接收結果,如果存在給予提示,程序直接退出String result = br.readLine(); //讀取 “存在”或者“不存在”的結果if("存在".equals(result)){System.out.println("您上傳的文件已經存在,請不要重復上傳");socket.close();return;} //7,如果不存在,定義FileInputStream讀取文件,寫出到網絡FileInputStream fis = new FileInputStream(file); //這里一定要用字節流,因為上傳的文件可能是文本,也可能是音頻,視頻等文件,字節流可以拷貝任何文件byte [] arr = new byte[8192];int len;while((len = fis.read(arr)) != -1){ps.write(arr,0,len); //將讀到的內容寫到服務器上去//PrintStream既可以寫字符串,也可以寫字節,而BufferedWriter,是字符流,沒辦法寫字節} fis.close();socket.close();}private static File getFile() {//生成方11法,為了需要獲取到文件Scanner sc = new Scanner(System.in); // 創建鍵盤錄入對象System.out.println("請輸入一個文件路徑");while(true){String line =sc.nextLine();File file = new File(line);if(! file.exists()){System.out.println("您錄入的文件錄入不存在,請重新錄入:");}else if(file.isDirectory()){System.out.println("您錄入的是文件夾路徑,請錄入一個文件路徑:");}else{return file;}}}} package com.wsq.test;import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket;public class Test2_UpdateServer { /*** * 3,建立多線程的服務器* 4,讀取文件名* 5,判斷文件是否存在,將結果發回客戶端* 6,定義FileOutputStream,從網絡讀取數據,存儲到本地* @throws IOException * * * * */public static void main(String[] args) throws IOException { //3,建立多線程的服務器ServerSocket server = new ServerSocket(1014); System.out.println("服務器已啟動,已綁定1014端口號");//4,讀取文件名while(true){final Socket socket = server.accept(); //接收客戶端的請求 new Thread(){public void run(){try {InputStream is = socket.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is));PrintStream ps = new PrintStream(socket.getOutputStream()); //創建輸出流String fileName = br.readLine(); //讀取文件名//5,判斷文件是否存在,將結果發回客戶端File dir = new File("update");dir.mkdir(); //創建文件夾File file = new File(dir,fileName); //封裝成File鍍錫if(file.exists()){ //如果服務器已經存在這個文件ps.println("存在"); //將“存在”寫給客戶端socket.close(); //關閉socket;return;}else {ps.println("不存在");} //8,定義FileOutputStream,從網絡讀取數據,存儲到本地FileOutputStream fos = new FileOutputStream(file);byte [] arr = new byte [8192];int len;while((len = is.read(arr)) != -1){fos.write(arr, 0, len);}fos.close();socket.close();} catch (IOException e) {e.printStackTrace();}}}.start();}}} 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Java——网络编程练习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 台湾签注多少钱啊?
- 下一篇: Java——反射(Class.forNa