我发觉在这里提问得到回答都是一半,没有得到很好的回答,感觉有多担心似的.哎,不过我还是问一下做过socket文件传输的问题.我客户端发某一个文件到服务端的时候,服务端得到的文件大小是0字节.谁能够告诉原因呢?

解决方案 »

  1.   

    1.是你没发送过去
    2.没有写倒文件里
    3.或者没有flush 或者 close。
      

  2.   

    参考一下我贴上去的发送 接收的代码,应该对你有帮助。
    http://community.csdn.net/Expert/topic/4514/4514295.xml?temp=.22987
      

  3.   

    这是客户端的部分程序:
    public void client(int s) {
    byte[] ff;
    int size;
    Socket clientSocket;
    PrintStream ps;
    String fileName;try {
    //  创建一个发送的Socket
    clientSocket = new Socket(QQ.IP, 8765);
    ps = new PrintStream(clientSocket.getOutputStream());
    size = (int) Myfile[s].length();
    fileName = Myfile[s].getName();
    BufferedReader br = new BufferedReader(new InputStreamReader(
    clientSocket.getInputStream()));
    String over = "\n";
    byte pp[] = over.getBytes();
    byte byname[] = (fileName + over).getBytes();
    System.out.println(new String(byname));
    //文件名
    ps.write(byname);
    ps.flush();
    String gh = br.readLine();
    String tmp;
    tmp = String.valueOf(size) + over;
    byte bySize[] = tmp.getBytes();
    //文件大小
    ps.write(bySize);
    ps.flush();
    String jj = br.readLine();
    ReadT2 += "已发送的文件为" + gh.trim() + ";大小为" + jj.trim() + " ";
    T[3].setText(ReadT2); //文件内容
    FileInputStream in = new FileInputStream(Myfile[s]);
    BufferedInputStream bf = new BufferedInputStream(in);
    ff = new byte[2048];
    int c;
    while ((c = bf.read(ff)) != -1) {
    ps.write(ff, 0, c);
    ps.flush();
    }ps.close();
    bf.close();
    in.close();
    clientSocket.close();
    T[s].setText("发送完毕,请选择下个文件!");
    T[s].setText("");
    } catch (Exception e) {
    System.out.println(e.toString());
    }
    }
    这是服务端的部分程序:
    public synchronized void run() {
    // TODO: Add your code here
    try{
    DataInputStream br = new DataInputStream(clientSocket.getInputStream());
    DataOutputStream output = new DataOutputStream(clientSocket.getOutputStream());

    byte[] nn = new byte[255];
    br.read(nn);
    output.write(nn);
    output.flush();

    byte[] ll = new byte[255];
    br.read(ll);
    output.flush();
    String tmpe = new String(ll);
    int aa = Integer.parseInt(tmpe.trim());

    String names = new String(nn);
    File MyFile = new File("d:\\");
    String files = "d:\\"+MyFile.separator+(names.trim());
    FileOutputStream out = new FileOutputStream(files);
    BufferedOutputStream bw = new BufferedOutputStream(out);
    byte ff[]=new byte[2048];
    int c = 0;

    while((c=br.read(ff))!=-1){
     bw.write(ff,0,c);  
    bw.flush();

    }
    bw.close();
    output.close();
    br.close();
    clientSocket.close();


    }请教大家了,
      

  4.   

    照你写的,你的交换文件名 和 大小都是双向的
    但是你的server那边的代码在“大小”那 少发了一次吧?
    建议你既然是传送2进制流  不如都用stream 别用reader了
      

  5.   

    服务器端:
    String files = "d:\\"+MyFile.separator+(names.trim());
    FileOutputStream out = new FileOutputStream(files);你这里的路径对吗?
    打印出来看看。ps:路径要试不存在的话你要用mkdirs先创建的,mkdir不行。