使用DataOutputStream中的writeUTF()发送文件名

时间:2013-11-02 15:38:11

标签: java sockets socket.io

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

此方法位于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));

1 个答案:

答案 0 :(得分:0)

您的代码是否编译而不起作用,或者javac会返回错误吗?

如果它不能编译,可能有一些可能是罪魁祸首:

  • Files.readAllBytes()java.nio.file.Path作为参数,而不是StringPath可以使用

    创建
    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