標籤:
TCP上傳文本其實就是檔案的複製,只不過檔案複製大多是發生在本地,而上傳下載是發生在網路上。
註:TCP上傳文本最要命的一個問題就是:用戶端資料發送完畢,而服務端仍然在等待讀取。這時,就需要用戶端發送結束標記s.shutdownOutput(),該方法其實就是發送給服務端一個結束標記,這個標記也可以自己定義,但是自己定義有可能與發送的內容重複,所以建議使用shutdownxxxput()方法。
TCP上傳文本的用戶端:
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;public class UpLoadClient { public static void main(String[] args) throws Exception, IOException { /* * 上傳文本的用戶端,讀取本地文本資料,發送給伺服器端,伺服器端接收完畢後回饋“上傳成功”字樣 */ System.out.println("上傳文本用戶端啟動....."); //用戶端socket Socket s = new Socket("192.168.17.1",10001);//綁定要發送的ip地址以及連接埠號碼 //1.確定資料來源。本地文字檔 BufferedReader bufr = new BufferedReader(new FileReader("NetSpider.txt")); //2.確定目的。socket輸出資料流// BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter out = new PrintWriter(s.getOutputStream(),true);//自動重新整理 String line = null; while((line = bufr.readLine())!=null){ out.println(line); } //給服務端發送標記// out.println("over");//容易重複 //使用socket的禁用輸出資料流方法。 s.shutdownOutput(); //3.通過socket讀取流擷取伺服器端返回的資料 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String lineIn = bufIn.readLine();//阻塞式 System.out.println(lineIn); //4.關閉 bufr.close(); s.close(); }}
TCP上傳文本的服務端:
import java.io.BufferedReader;import java.io.FileWriter;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class UpLoadServer { public static void main(String[] args) throws Exception { /* * 上傳文本的服務端,接收文本資料,並儲存到檔案中,伺服器端接收完畢後,回饋“上傳成功”字樣 */ System.out.println("上傳服務端啟動...."); //1.服務端對象 ServerSocket ss = new ServerSocket(10001); //2.擷取用戶端 Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"...connected"); //3.擷取讀取流,確定源,網路socket BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //4.確定目的 PrintWriter pw = new PrintWriter(new FileWriter("server.txt"),true); //5.頻繁讀寫 String line = null; while((line = bufIn.readLine())!=null){// if("over".equals(line)){// break;// } pw.println(line); } //6.改用戶端反饋資訊 PrintWriter out = new PrintWriter(s.getOutputStream(),true); out.println("上傳成功"); pw.close(); s.close(); ss.close(); }}
TCP上傳文本