客户将文件夹里面的图片,上传到服务器端
Client类
public class TCPClient {
public static void main(String[] args) throws IOException{
//创建一个本地字节输入流
FileInputStream fis=new FileInputStream("E:\\demo01\\1.jpg");
//创建一个客户端Socket对象,构造方法中绑定IP地址和端口号
Socket socket=new Socket("127.0.0.1",8888);
//获取网络字节输出流
OutputStream os=socket.getOutputStream();
byte[] bytes=new byte[1024];
int len=0;
//使用本地字节输入流对象中的read方法,读取本地文件,并上传到服务器
while ((len=fis.read(bytes))!=-1){
os.write(bytes,0,len);
}
//将网络输出流关闭,避免while陷入死循环
socket.shutdownOutput();
//创建网络字节输入流的对象,用来获取服务器传回来的信息
InputStream is=socket.getInputStream();
while ((len=is.read(bytes))!=-1){
System.out.println(new String(bytes,0,len));
}
//关闭资源
fis.close();
socket.close();
}
}
Server
public class TCPServer {
public static void main(String[] args) throws IOException {
//创建一个服务对象
ServerSocket server=new ServerSocket(8888);
//获取到请求客户端的socket对象
while (true) {
Socket socket = server.accept();
//创建一个网络字节输入流
InputStream is = socket.getInputStream();
//判断本地文件夹是否存在,不存在则创建一个
File file = new File("E:\\demo02");
if (!file.exists() && !file.isDirectory()) {
file.mkdir();
}
/*
优化:
解决Client只能上传一次的问题
定义一个文件名的命名规则
*/
String fileName = "itcase" + System.currentTimeMillis() + new Random().nextInt(999999) + ".jpg";
//创建一个本地字节输出流,构造方法中填写需要输出的目的地址
// FileOutputStream fos=new FileOutputStream(file+"\\1.jpg"); (优化前写法)
FileOutputStream fos = new FileOutputStream(file + "\\" + fileName);
//使用网络字节输入流来读取用户输入的对象
int len = 0;
byte[] bytes = new byte[1024];
while ((len = is.read(bytes)) != -1) {
fos.write(bytes, 0, len);
}
//创建网络字节输出流对象,告知客户端“上传成功”
socket.getOutputStream().write("上传成功".getBytes());
//关闭资源
fos.close();
socket.close();
}
// server.close();
}
}