服务器端:
package cn.itheima.net.UploadFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class UploadServer {
public static int count=0;
/**
* 上传文件的服务器端
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// 创建服务器端
ServerSocket server = new ServerSocket(10002);
System.out.println("服务器已经启动...");
while (true) {
//创建一个客户端监听
Socket s = server.accept();
//将新接入的客户端放入线程
new Thread(new ServerManager(s)).start();
}
}
}
管理客户端的线程
/**
* 对客户端进行管理的类
*
* @author 超哥
*
*/
class ServerManager implements Runnable {
private Socket s;
public ServerManager(Socket s) {
this.s = s;
}
@Override
public void run() {
InputStream in = null;
FileOutputStream fos = null;
try {
// 获取输入流
in= s.getInputStream();
//获取到客户端的Ip地址
String ip = s.getInetAddress().getHostAddress();
//创建文件上传的目录
File dir=new File("d:\\pic");
if(!dir.exists())
//如果不存在则创建目录
dir.mkdirs();
//创建上传的文件
File file=new File(dir,ip+UploadServer.count+".rmvb");
//如果上传的文件已经存在,则改名上传
if(file.exists())
{
file=new File(dir,ip+"("+(++UploadServer.count)+").jpg");
}
// 创建一个写文件流
fos = new FileOutputStream(file);
byte[] buf = new byte[1024];
int len = 0;
while ((len = in.read(buf)) != -1) {
//将从网络输入流中读取的数据写入到文件中
fos.write(buf, 0, len);
}
//网络流读取完毕后,告知客户端上传成功
OutputStream out=s.getOutputStream();
out.write("来自服务器的消息:上传成功!".getBytes());
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fos.close();
in.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
客户端:
package cn.itheima.net.UploadFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class UploadClient {
/**
* 文件上传客户端
* @param args
* @throws IOException
* @throws UnknownHostException
* @throws MyException
*/
public static void main(String[] args) throws UnknownHostException,
IOException, MyException {
//创建一个客户端
Socket s = new Socket("127.0.0.1", 10002);
// 通过命令提示符的arg[0]读取需要上传的文件路径
File file = new File(args[0]);
//如果文件不存在则抛出异常
if (!file.exists()) {
throw new Exception("需要上传的文件不存在");
}
// 获取一个输出流
OutputStream out = s.getOutputStream();
// 创建文件的读取流,把文件全部读取到缓冲区
FileInputStream fis = new FileInputStream(file);
//创建一个1K的缓冲区
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
//将文件中读取的内容写出到输出流
out.write(buf, 0, len);
}
//告知服务端输出流输出完毕
s.shutdownOutput();
//创建一个读取流,用于读取服务器端的信息
InputStream in = s.getInputStream();
buf = new byte[1024];
len = in.read(buf);
String result = new String(buf, 0, len);
//将从服务器读取的信息输出在控制台
System.out.println(result);
in.close();
s.close();
}
}