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