1 目标:实现客户端上传任意类型的文件数据给服务端保存起来
客户端代码:
public class Client {
public static void main(String[] args) {
try ( FileInputStream is = new FileInputStream("D:\\serverfile\\png\\d4126b621ac9baab9cf15eec657a661c.jpg");
){
//读取与服务端socket连接
Socket socket = new Socket("127.0.0.1", 8888);
//将字节输出流包装成一个数据输出流
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//先发送上传文件后缀给服务端
dos.writeUTF(".jpg");
//将文件数据发送给服务端进行接收
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) > 0){
dos.write(buffer,0,len);
}
dos.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
服务端代码:
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss = new ServerSocket(8888);
while (true) {
Socket socket = ss.accept();
new ServerReaderThread(socket).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
处理服务端线程类代码:
public class ServerReaderThread extends Thread{
private Socket socket;
public ServerReaderThread (Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
//得到一个数据输入流读取客户端发送过来的数据
DataInputStream dis = new DataInputStream(socket.getInputStream());
//读取客户端发送过来的文件类型
String suffix = dis.readUTF();
System.out.println("客户端已经读取到了文件类型:"+suffix);
//定义一个字节输出管道负责将客户端发来的文件数据写出去,防止发生文件覆盖定义不同的文件名称
FileOutputStream os = new FileOutputStream("D:\\data\\applogs\\"+ UUID.randomUUID().toString()+suffix);
//从数据输入流中读取数据,写出到字节输入流中去
byte[] buffer = new byte[1024];
int len;
while ((len = dis.read(buffer)) >0 ){
os.write(buffer,0,len);
}
os.close();
System.out.println("服务端接收文件保存成功");
}catch (Exception e){
e.printStackTrace();
}
}
}
如此,我们就实现了从一个文件夹中将图片传送到另一个文件夹。