java socket实现文件夹传输,哪儿出错了

java socket实现文件夹传输,哪里出错了?
服务端
mport java.io.*;
import java.net.*;

public class FolderServer{
ServerSocket server;
Socket client;
boolean flag = true;
BufferedReader br;
PrintWriter pw;
FileOutputStream fos;

public static void main(String[] args){
new FolderServer().ServerStart();
}

public void ServerStart(){
try{
server = new ServerSocket(8888);
client = server.accept();
System.out.println("Connected");
    br =  new BufferedReader(new InputStreamReader(client.getInputStream()));

new File("e:/javaA").mkdirs();
while(flag){
String s = br.readLine();
if(s.contains("0f")){
File f = new File("e:/javaA" + (s.replace("0f","")));
System.out.println("create directory");
f.mkdirs();
}else if(s.contains("0c")){
fos = new FileOutputStream("e:/javaA" + (s.replace("0c","")));
pw = new PrintWriter(fos);

String s1 = br.readLine();
while(s1 != null){
pw.println(s1);
pw.flush();
s1 = br.readLine();
}
br.close();
pw.close();

}else if(s.contains("00")){
flag = false;
}

}
client.close();
server.close();
}
catch(IOException e){
System.out.println("Error");
 }
  }
}
客户端
import java.io.*;
import java.net.*;


public class FolderClient{
Socket client;
//FileInputStream fis;
//InputStreamReader is;
PrintWriter pw;
BufferedReader br;
boolean flag = true;

public static void main(String[] args){
new FolderClient().ClientStart(); 
}

public void ClientStart(){
try{
client = new Socket("127.0.0.1",8888);
System.out.println("Connected");
pw = new PrintWriter(client.getOutputStream());
transmit(new File("d:/javaA"));
String s = "00";
pw.println(s);
pw.flush();  
}catch(IOException e){
System.out.println("Error");
}
}

public void transmit(File f)throws IOException{
String s1;
if(f.isDirectory()){
    File[] childs = f.listFiles();
for(int i = 0;i < childs.length;i ++ ){
s1 = "0f" + (childs[i].getPath().replace("d:/javaA",""));
pw.println(s1);
pw.flush();
transmit(childs[i]);
}
}else if(f.isFile()){
//fis = new FileInputStream(f);
    //is = new InputStreamReader(fis);
br  = new BufferedReader(new InputStreamReader(new FileInputStream(f)));

s1 = "0c" + (f.getPath().replace("d:/javaA",""));
pw.println(s1);
pw.flush();

String s2 = br.readLine();
while(s2 != null){
pw.println(s2);
pw.flush();
s2 = br.readLine();
}
}
br.close();
pw.close();
client.close();


}
}

------解决思路----------------------
引用
谢谢了,这个可以!!!但是我想问问第一个的问题在哪里,为什么不行?还有就是为什么要用StringBuffer类不用String类了,用String类不行么? 

1、第一个问题出在没有循环完所有的文件,输出流就提前关闭了(pw.close())
2、用StringBuffer习惯了,拼接方便点(用String也可以)