2013-11-02 37 views
-2

即时编码客户端服务器在Java中,客户端使用writeUTF发送文件名,服务器接收数据,然后从服务器获取文件。你能给我一些建议吗?我不知道我做错了什么,它不工作。谢谢:)使用writeUTF()从DataOutputStream发送文件名

这种方法在Client.java

public void enviarFichero(String file, String server, int port) 
    { 
     // open a socket 
     Socket socket = openSocket(server, port); 

     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

     byte[] data = Files.readAllBytes(file); 

     DataOutputStream dos = new DataOutputStream(baos.write(data)); 

     dos.writeUTF(); 



    } 

这是Server.java

ByteArrayInputStream bais = new ByteArrayInputStream(almacen); 
DataInputStream dis = new DataInputStream(bais); 

filename = dis.readUTF(); 
System.out.println("Receiving files "+filename+" from "+dirIPCliente.getHostName()+":"+clientPort); 

// Open destination file 
filtroDestino = new BufferedOutputStream(new FileOutputStream(nombreFichero)); 

回答

0

请问你的代码编译和无法工作,或者将javac返回错误?

如果不能编译,也就是几件事情,可能是罪魁祸首:

  • Files.readAllBytes()需要java.nio.file.Path作为它的参数,而不是一个StringPath S可使用

    java.nio.file.FileSystems.getDefault().getPath(/* insert file path String here */) 
    
  • DataOutputStream注意到在它的构造java.io.OutputStream实现创建,而ByteArrayOutputStream.write(...)回报void

  • DataOutputStream.writeUTF(...)需要String参数。

如果你的代码编译,但不起作用,可能是因为这些:

  • 你打开客户端的代码,套接字,但你永远不写入任何数据了。
  • 如果你想读取文件的内容,你应该使用BufferedInputStreamFileInputStream
  • 错误在openSocket(...)可能存在或在您的 服务器的代码别的地方。你可以发布这些呢?

此外,您可能需要阅读有关文件输入/输出和网络官方的Javadoc:
文件I/O:http://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary.html
网络:http://docs.oracle.com/javase/7/docs/api/java/net/package-summary.html

相关问题