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.ソースコード
サーバ:
サーバ:
//ポートの作成(受信側オブジェクトの作成)
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();
}
}
}
}