java socket实现文件夹的传输!这个程序哪里错了?

大普大普大普 2014-12-03 06:47:21
客户端
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");
}
}
}
...全文
232 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyc_ 2014-12-04
  • 打赏
  • 举报
回复
先从发送字符串开始一步步查找出错的地方
wyc_ 2014-12-04
  • 打赏
  • 举报
回复
引用 2 楼 HONEY18703425251 的回复:
[quote=引用 1 楼 cumtwyc 的回复:] 先从发送字符串开始一步步查找出错的地方
我就是一步一步做的,[/quote] 那你有没有找到出错的大致位置呢
大普大普大普 2014-12-04
  • 打赏
  • 举报
回复
引用 1 楼 cumtwyc 的回复:
先从发送字符串开始一步步查找出错的地方
我就是一步一步做的,

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧