package socket_file;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
private static int port = 2100;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String filePath = "d:\\b.jar";
File file = new File(filePath);
try {
start(file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void start(File file) throws IOException {
// TODO Auto-generated method stub
ServerSocket server = new ServerSocket(port);
while(true){
Socket socket = server.accept();//在這個地方阻塞
new Thread(new Task1(file,socket)).start();
}
}
static class Task1 implements Runnable{
private File file;
private Socket socket;
Task1(File file,Socket socket){
this.file = file;
this.socket = socket;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeUTF(file.getName());
out.flush();
out.writeInt((int) file.length());
out.flush();
int bufferSize = 1024;
byte[] size = new byte[bufferSize];
while(true){
int read = 0;
if(in!=null){
read = in.read(size);
System.out.println("讀取長度"+read);
}
if(read == -1){
break;
}
out.write(size,0,read);
}
out.flush();
socket.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package socket_file;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class Util {
private String ip;
private int port;
private Socket socket = null;
private DataInputStream in;
private DataOutputStream out;
Util(String ip, int port) {
this.ip = ip;
this.port = port;
}
public boolean getConnection() {
try {
if (socket != null) {
socket.close();
}
socket = new Socket(ip, port);
return true;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
/**
* @param args
* @throws IOException
*/
public DataInputStream getInformation() throws IOException {
in = new DataInputStream(new BufferedInputStream(socket
.getInputStream()));
return in;
}
}
package socket_file;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.FilePermission;
import java.io.IOException;
import java.net.Socket;
public class client {
/**
* @param args
*/
private Util socket = null;
private String ip = "localhost";
private int port = 2100;
Util util;
public client() throws IOException {
if (isConnected()) {
getMessage();
}
}
private void getMessage() throws IOException {
// TODO Auto-generated method stub
if (socket == null) {
return;
}
DataInputStream in = null;
try {
in = socket.getInformation();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("error");
return;
}
String savePath = "e:\\";
int bufferSize = 1024;
byte[] size = new byte[bufferSize];
long length;
savePath += in.readUTF();
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(
new FileOutputStream(savePath)));
length = in.readLong();
System.out.println("文件長度:" + length + "\n");
System.out.println("開始接收文件" + "\n");
while (true) {
int temp = 0;
if (in != null) {
temp = in.read(size);
}
if (temp == -1) {
break;
}
out.write(size, 0, (int) temp);
}
System.out.println("接收完成,存儲在" + savePath + "中");
out.close();
}
public boolean isConnected() {
socket = new Util(ip, port);
if (socket.getConnection())
return true;
else
return false;
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
new client();
}
}