Tcp/ipでサーバーとクライアントを構築し、複数のクライアントからサーバへのファイル転送をマルチスレッドとI/oデータストリームで実現する。

6691 ワード

1.クライアントとサーバはTcpを利用して構築し、2台のコンピュータ間の通信を実現するために、通信の両端にsocketオブジェクトを作成する必要があります。
    サーバ:
    //ポートの作成(受信側オブジェクトの作成)
    ServerSocket serverSocket=  new ServerSocket(8888)
   //傍受する
   Socket socket=  serverSockett.accept()
   クライアント:
    //送信先ソケットオブジェクトの作成(接続の作成)
   Socket socket=  new Socket(「172.0.0.1」、8888)
 2.クライアントがサーバに接続したら、以下からローカルのBufferedInputStreamでファイルを入力して、DataOutputStreamでファイルを書き、scoketを使ってサーバ端に転送します。
        DataOutputStream data OutputStream=null        BufferedInputStream bufferediInputStream=null;        Socket socket=null;        //ファイルパス        File file=new File("D:\\凯文-杜兰特绝杀.mp 4")        //受信ファイル名        String name=file.getName()             try{            //接続を作成            socket=new Socket(192.168.9.919);            //ファイルを書き込み、scoketでサーバーに転送します。            dataOutputStream=new Data Output Stream(sockett.get Output Stream);            //ローカルからファイルを読みます            bufferedInputStream=new BufferediInputStream(new FileInputStream(file);            dataOutputStream.writeUTF(name);            int len;            //読みの長さとバイト形式で読み、書きます。            byte[]b=new byte[1024];            while((len=buffered InputStream.read(b))!=-1){                //ファイルを書く                dataOutputStream.write(b,0,len);                     //更新                dataOutputStream.flush()                         }
3.サーバー側がdata InputStreamでクライアントから送られてきたファイルを受信して、ローカルにバfferedOutputStreamで書きます。これでOKです。
ServerSocket serverSocket=null;        Socket socket=null;        Data InputStream data InputStream=null;        BufferedOutputStream bufferedOutputStream=null;        File file=new File("D:\\test")        if(!file.exists(){            file.mkdirs();        }         try{            //ポートの作成(受信側オブジェクトの作成)            serverSocket=new ServerSocket(9999)            //傍受対象            socket=serverSockett.accept()            //socket伝送のファイルを受信します。            data InputStream=new Data InputStream(sockett.get InputStream);            //転送ファイルの名前を取得します。            String name=data InputStream.readUTF()            //コピーしたファイルの名前            File file 2=new File(file+File.separator+name);            //読んだ書類をローカルに書く            bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(file 2);                 int len;            byte[]b=new byte[1024];                     while((len=data InputStream.read(b))!=-1){                bufferedOutputStream.write(b,0,len)                bufferedOutputStream.flush()                 }
4.ソースコード
サーバ:
package com.xin01;

import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	public static void main(String[] args) {

		ServerSocket serverSocket = null;
		Socket socket = null;	
		try {
			//    (       )
			serverSocket = new ServerSocket(6666);	
			// while true              
			while(true) {			
				//    	
				socket = serverSocket.accept();	
				new ThreadDemo(socket).start();
			}		
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}finally {
			try {
				serverSocket.close();
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}			
		}
	}

}
クライアント:
package com.xin01;

import java.io.BufferedInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
	public static void main(String[] args) {
		DataOutputStream dataOutputStream = null;
		BufferedInputStream bufferedInputStream = null;
		Socket socket = null;
		//    
		File file = new File("D:\\    \\mysql-installer-community-5.7.23.0.msi");
		//      
		String name = file.getName();	
		try {
			//    
			socket = new Socket("192.168.90.111", 8888);
			System.out.println("    ");
			//   ,  scoket       
			dataOutputStream = new DataOutputStream(socket.getOutputStream());		
			//      
			bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
			//outThread outThread = new outThread(socket);
			//outThread.start();
			dataOutputStream.writeUTF(name);
			
			int len;
			//              
			byte[] b = new byte[1024];
			while ((len=bufferedInputStream.read(b))!=-1) {
				//   
				dataOutputStream.write(b, 0, len);	
				//  
				dataOutputStream.flush();			
			}
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				//  
				dataOutputStream.close();
				bufferedInputStream.close();
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}
サーバマルチスレッド:
package com.xin01;

import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.Socket;

public class ThreadDemo extends Thread{
	private Socket socket;
	public ThreadDemo(Socket socket) {
		super();
		this.socket = socket;
	}
		
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();	
		DataInputStream dataInputStream = null;
		BufferedOutputStream bufferedOutputStream = null;
		try {		
			//  socket     
			dataInputStream = new DataInputStream(socket.getInputStream());
			//         
			String name = dataInputStream.readUTF();
			//        
			File file = new File("D:\\test"+File.separator+socket.getInetAddress());
			if(!file.exists()) {
				file.mkdirs();
			}
			File file2 = new File(file+File.separator+name);
			//           
			bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file2));
			System.out.println("   :"+name);
			System.out.println("ip  :"+socket.getInetAddress());
			int len;
			byte[] b = new byte[1024];		
			while((len=dataInputStream.read(b))!=-1) {
				bufferedOutputStream.write(b, 0, len);
				bufferedOutputStream.flush();			
			}
			System.out.println("    ");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("    !!!");
		}finally {
			try {		
				bufferedOutputStream.close();
				dataInputStream.close();
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
}