你的server socket和client socket 你可以自己制定一个协议  就比如 
第一行 是文件名 文件后缀 文件字符编码等元数据信息(按照你制定的次序 和 分隔符来界定)   
第二行开始 是文件内容
然后两端传文件就按照你的协议来传递和接收

解决方案 »

  1.   


    这个我用字符流做了,传文本文件是成功了,但是传音乐,视频时就有问题了,每个文件都大了不少,打不开。主要是字符流传二进制文件就有问题。因此我还是想用字节流,但是吧,字节流,不好区分不同文件啊,怎么分割呢。后来我想用字符流来传分割用的字符吧,中间在夹着些字节流传内容,但是,我不知道该怎么判定我这个字节流是结束了:Client:
    OutputStream out = socket.getOutputSream():
    OutputStreamReader osw = new OutputSreamReader(out, "UTF-8");
    for(File f : files){
         // 用字符流传文件名
         osw.write(f.getName() + "\n");
         //字节流传文件内容
         InputStream in = new FileInputStream(f);  
         byte[] buffer = new byte[1024];
         int length; 
          while(-1 != (length = in.read(buffer))){
                out.write(buffer, 0, length);
          }
         in.close(); //服务器怎么区分这里读结束了?当一个流close了,也会把信息发给服务器吗
         out.flush();
         osw.write("endfile\n");
    }
      

  2.   

    用DataOutputStream InputStream包装下DataOutputStream.writeUTF("文件名")
    DataOutputStream .writeLong(file.length());
    写数据
    对面就是
    InputStream.readUTF();//得到文件名
    long fileLength  = InputStream.readLong();//得到文件长度,即接下来需要读取多少字节
    long count = 0;
    while( count<fileLength  ){
         count+= in.read(xxx);//socket流是不会读到-1的,没有数据会阻塞,只到有数据。
    }
    我一般是 [文件名,文件长度,文件内容]