ネットワークプログラミング_TCPプロトコルのファイルアップロード


1、需要分析:
                          ①クライアントがサービス側にテキストファイルをアップロードする
                          ②サービス側はファイルを受け取った後、終了情報をフィードバックし、「受信データ成功」を印刷する
                          ③クライアントがサービス側からのフィードバックを受けた後、「アップロードファイル成功」を印刷する
                   2、クライアント:
                           ①Socket、ファイル入力フロー、Socket出力フロー、Socket入力フローの定義
                          ②ファイル入力ストリームからファイルを読み取る、 
                        ③読み込んだデータをSocket出力ストリームに書き込む
                         ④リソースのクローズ
                 詳細はコードコメントを参照してください.
package day23.fileUpload;
import java.net.*;
import java.io.*;
/**
 * @author Administrator @zsw 2012-7-18   09:21:04
 * 
 *   :              
 * 
 *      :
 * ①  Socket、     、Socket   、Socket   
 * ②         ,
 * ③        Socket    
 * ④    
 */
public class FileClient {

	
	public static void main(String[] args) throws Exception{
		//①:    
		Socket s=new Socket("127.0.0.1",10006);
		BufferedReader bufr=new BufferedReader(new FileReader("D:\\1.txt"));
		//         
		BufferedWriter bufout=new BufferedWriter(
				new OutputStreamWriter(s.getOutputStream()));
//		PrintWriter out=new PrintWriter(s.getOutputStream(),true);
		BufferedReader bufin=new BufferedReader(
				new InputStreamReader(s.getInputStream()));
		
	
		//②    
		String line=null;
		while((line=bufr.readLine())!=null){
			 
			System.out.println(line);
			bufout.write(line);
			bufout.newLine();
			bufout.flush();
		}
		
		//③     ,        。           
		 s.shutdownOutput();//         ,       -1
		 
		 String line2=null;
		 while((line2=bufin.readLine())!=null){
			 if("success".equals(line2)){	
				 System.out.println("      !");
				 break;
			 }
		 }
		
		//④    
		 bufr.close();
		 s.close();


	}

}

    3、サービス側: 
                  ①、リソースの定義:ServerSocket、ストリーム 
                      ②クライアントからデータを受信し、ファイルに書き込む
                    ③受信後、クライアントに「success」をフィードバック 
                  ④リソースのクローズ
        詳細については、コード注記を参照してください.
   
package day23.fileUpload;
import java.io.*;
import java.net.*;
/**
 * @author Administrator @zsw 2012-7-18   09:43:46
 * 
 *    :
 * 1、    :ServerSocket、 
 * 2、        ,       
 * 3、    ,      "success"
 * 4、    
 * 
 *   :
 * ①   readLine       ,              
 *                    
 * ②      ,        ,          
 *     s.shutdownOutput() ,   Socket shutdownOutput  
 *           -1, readLine()=null,     
 */
public class FileServer {
	
	public static void main(String[] args) throws Exception {
		//①  
		ServerSocket ss=new ServerSocket(10006);
		Socket s=ss.accept();
		//     
		BufferedWriter bufw=new BufferedWriter(new FileWriter("D:\\tx\\1.txt"));
		//Socket     
		BufferedReader bufin=new BufferedReader(
				new InputStreamReader(s.getInputStream()));
		BufferedWriter bufout=new BufferedWriter(
				new OutputStreamWriter(s.getOutputStream()));
	
		String ip=s.getLocalAddress().getHostAddress();
		System.out.println(ip+" ....connnect ");
		//②:   、    、    、    
		String line=null;
		/*
		 *       line=null   ,           
		 *  s.shutdownOutput();
		 *           ,       -1,line   =null
		 */
		//     (    ) 
		while((line=bufin.readLine())!=null){
			bufw.write(line);
			bufw.newLine();
			bufw.flush();
				
		}
		System.out.println("      !");
		bufout.write("success");
		bufout.newLine();
		bufout.flush();
		s.shutdownOutput();
		
		//    
		bufw.close();
    	s.close();
		ss.close();
		
		
		
	}

}
 
 

   4、

         ① readLine , , , 。

         ② , , ,

            s.shutdownOutput() , Socket shutdownOutput -1, readLine()=null,