您的位置:首页 > 其它

Socket 上传文件

2015-10-20 09:21 69 查看
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class FileServer {

private int port = 1128;
private ServerSocket servSocket;
private Socket socket;
private DataInputStream input;
private DataOutputStream outPut;
private String savePath = "E:\\up\\";
public void startServer() {
// 已经传输的文件大小
int ycSize = 0;
// 文件总大小
long sumSize = 0;
// 缓存大小
int hcSize = 8192;
// 缓存
byte[] hc = new byte[hcSize];
try {
servSocket = new ServerSocket(port);
socket = servSocket.accept();
input = new DataInputStream(new BufferedInputStream(
socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}

try {
// 将文件名字读取进来
savePath += input.readUTF();
// 文件的长度读取进来(实际只是为了显示进度)
sumSize = input.readLong();
} catch (IOException e) {
e.printStackTrace();
}

try {
outPut = new DataOutputStream(new BufferedOutputStream(
new FileOutputStream(savePath)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}

while (true) {
int read = 0;
if (input != null) {
try {
read = input.read(hc);
} catch (IOException e) {
e.printStackTrace();
}
}

ycSize += read;
if (read == -1) {
break;
}

// 下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比
System.out.println("文件接收了" + (ycSize * 100 / sumSize) + "%\n");
try {
outPut.write(hc, 0, read);
} catch (IOException e) {
e.printStackTrace();
}
}

if (outPut != null) {
try {
outPut.close();
} catch (IOException e) {
e.printStackTrace();
}
outPut = null;
}

if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
input = null;
}

if (socket != null) {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
socket = null;
}

if (servSocket != null) {
try {
servSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
servSocket = null;
}

System.out.println("接收完成,文件存为" + savePath + "\n");
}

public static void main(String[] args) {
FileServer fileServer = new FileServer();
fileServer.startServer();
}
}


import java.io.BufferedInputStream;
import java.io.DataInputStream;
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 FileClient {
public static void main(String[] args) {

String filePath = "E:\\test.txt";
File file = new File(filePath);
DataInputStream input = null;
DataOutputStream output = null;
Socket socket = null;
try {
String ip = "5.239";
int port = 1128;
socket = new Socket(ip, port);
input = new DataInputStream(new BufferedInputStream(
new FileInputStream(filePath)));
output = new DataOutputStream(socket.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

try {
output.writeUTF(file.getName());
output.flush();
output.writeLong((long) file.length());
output.flush();
} catch (IOException e) {
e.printStackTrace();
}

int bufferSize = 8192;
byte[] buf = new byte[bufferSize];

while (true) {
int read = 0;
if (input != null) {
try {
read = input.read(buf);
} catch (IOException e) {
e.printStackTrace();
}
}

if (read == -1) {
break;
}

try {
output.write(buf, 0, read);
output.flush();
} catch (IOException e) {
e.printStackTrace();
}

}

try {
input.close();
output.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: