java socket实现文件夹的传输!这个程序哪里错了?
客户端
import java.io.*;
import java.net.*;
public class MyClient{
Socket client;
boolean flag = true;
FileInputStream fis;
DataOutputStream dos;
DataInputStream dis;
public static void main(String[] args){
new MyClient().ClientStart();
}
public void ClientStart(){
try{
client = new Socket("127.0.0.1",8888);
System.out.println("Connected");
dos = new DataOutputStream(client.getOutputStream());
dis = new DataInputStream(client.getInputStream());
transmit(new File("d:/javaA"));
String s = "00";
byte[]b = s.getBytes();
dos.write(b,0,s.length());
dos.flush();
}catch(IOException e){
System.out.println("Error");
}
}
public void transmit(File f)throws IOException{
byte[]b;
String ts;
int ti;
for(File f1:f.listFiles()){
if(f1.isDirectory()){
ts = "0f" + (f1.getPath().replace("d:/javaA",""));
b = ts.getBytes();
dos.write(b);
dos.flush();
dis.read();
transmit(f1);
}else{
fis = new FileInputStream(f1);
ts = "0c" + (f1.getPath().replace("d:/javaA",""));
b = ts.getBytes();
dos.write(b);
dos.flush();
dis.read();
b = new byte[10000];
while(fis.available() > 0){
ti = fis.read(b);
dos.write(b,0,ti);
dos.flush();
}
dos.close();
fis.close();
dis.close();
}
}
}
}
服务器端
import java.io.*;
import java.net.*;
public class MyServer{
ServerSocket server;
Socket client;
boolean flag = true;
DataInputStream dis;
DataOutputStream dos;
FileOutputStream fos;
public static void main(String[] args){
new MyServer().ServerStart();
}
public void ServerStart(){
try{
server = new ServerSocket(8888);
System.out.println("port : " + server.getLocalPort());
client = server.accept();
System.out.println("Connected");
dis = new DataInputStream(client.getInputStream());
dos = new DataOutputStream(client.getOutputStream());
String answer = "g";
byte[]ans = answer.getBytes();
byte[]b = new byte[1000];
int ti;
new File("e:/javaA").mkdirs();
while(flag){
ti = dis.read(b);
dos.write(ans);
String select = new String(b,0,ti);
if(select.contains("0f")){
File f = new File("e:/javaA" + (select.replace("0f","")));
System.out.println("create directory");
f.mkdirs();
}else if(select.contains("0c")){
fos = new FileOutputStream("e:/javaA" +(select.replace("0c",""))) ;
//String cs;
boolean flag = true;
int tip = dis.readInt();
dos.write(ans);
while(tip > 0){
ti = dis.read(b,0,(tip > 1000 ? 1000: tip));
tip = tip - ti;
//cs = new String(b,0,4);
fos.write(b,0,ti);
}
fos.flush();
fos.close();
dos.write(ans);
}else if(select.contains("00")){
flag = false;
}
}
dis.close();
client.close();
server.close();
}
catch(IOException e){
System.out.println("Error");
}
}
}