1. 程式人生 > >使用TCP協議,分別編寫服務端和客戶端,要求客戶端向服務端上傳檔案。(使用字元流完成)

使用TCP協議,分別編寫服務端和客戶端,要求客戶端向服務端上傳檔案。(使用字元流完成)

package Test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

/**
 * 5.使用TCP協議,分別編寫服務端和客戶端,要求客戶端向服務端上傳檔案。
 * @author Administrator
 */
public class Test05 {
	//客戶端
	public static void main(String[] args) throws IOException {
		//建立客戶端端點物件,並確定服務端的ip及埠號;
		Socket s = new Socket("localhost",8970);
		//獲取通道輸出流物件,給服務端傳送資料。
		OutputStream ost = s.getOutputStream();
		//將位元組輸出流轉換成字元輸出流
		OutputStreamWriter ops = new OutputStreamWriter(ost);
		//利用字元緩衝流提高效率
		BufferedWriter bfw = new BufferedWriter(ops);
		
		//建立字元輸入流
		FileReader fr = new FileReader("d:\\1.txt");
		
		//讀取本地磁碟的檔案
		char [] by = new char [1024];
		int len = 0 ;
		while((len = fr.read(by)) != -1) {
			bfw.write(by, 0, len);
			bfw.newLine();
			bfw.flush();
		}
		fr.close();
		//告訴服務端資料已傳送完成
		System.out.println("資料已傳送完畢");
		s.shutdownOutput();
		
		//獲取服務端反饋的資料
		BufferedReader bfd = new BufferedReader(new InputStreamReader(s.getInputStream()));
		String line = bfd.readLine();
		System.out.println(line);
		
		//關閉客戶端
		s.close();
	}
}

package Test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 使用TCP協議,分別編寫服務端和客戶端,要求客戶端向服務端上傳檔案。
 * @author Administrator
 */
public class Test06 {
	/**
	 * 服務端
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//建立服務端端點物件,並自定義埠號。
		ServerSocket ss = new ServerSocket(8970);
		
			//接收客戶端
			Socket s = ss.accept();
			//獲取ip
			String ip = s.getInetAddress().getHostAddress();
			
			//獲取輸入流,讀取客戶端給服務端傳送的資料
			BufferedReader bfr = new BufferedReader(new InputStreamReader(s.getInputStream()));
			//建立輸出流物件,將資料寫入到本地磁碟
			BufferedWriter bfd = new BufferedWriter(new FileWriter("d:\\"+ip+".txt"));
			
			String line = null;
			while((line = bfr.readLine()) != null) {
				bfd.write(line);
				bfd.newLine();
				bfd.flush();
			}
			System.out.println("檔案儲存成功");
			bfd.close();
			
			//給客戶端傳送資料
			BufferedWriter bfd2 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
			bfd2.write("檔案上傳成功");
			bfd2.flush();
			s.close();
		}
	}

在這裡插入圖片描述
服務端還可以新增執行緒,實現多個客戶端同時向服務端傳遞資料