繁体   English   中英

writeUTF不起作用:/

[英]writeUTF not working :/

我正在对使用DatagramSocket(UDP)发送文件的客户端进行编码,但是首先我们需要使用writeUTF()将文件名发送到服务器。 客户端和服务器都可以编译并运行,没有任何错误,但是文件名似乎从未到达服务器。 对可能发生的事情有任何想法吗? 我在下面发布代码...

谢谢 :)

客户端.java

     ...
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    byte[] buf = new byte[1024];

                    for (int readNum; (readNum = fis.read(buf)) != -1;)
                    {
                        bos.write(buf, 0, readNum); //no doubt here is 0
                    } 

                    // File data
                    byte[] data = bos.toByteArray();

                    DataOutputStream dos = new DataOutputStream(bos);
                                //file is a String with the name of the file
                    dos.writeUTF(file);
//Setting up DatagramSocket
            DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
            socket.send(packet);
        ...

服务器.java

...
        almacen = new byte[MAXNOMBREFICHERO + 2];
        packet = new DatagramPacket( almacen, almacen.length );

    System.out.println("\nWaiting client...");
    socket.receive(packet);
    dirIPClient = packet.getAddress();
        clientPort = packet.getPort();

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

        filename = dis.readUTF();
...

您将文件内容写入bos并将其转换为字节数组。 因此,您现在已经在data获得了文件内容。 您将流转换为字节数组后将file写入bos ,因此不包含文件名。 在将实际文件内容写入bos之前,请调用writeUTF

ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(bos);

// file is a String with the name of the file
dos.writeUTF(file);

byte[] buf = new byte[1024];
for (int readNum; (readNum = fis.read(buf)) != -1;) {
    dos.write(buf, 0, readNum);
}

// Packet data
byte[] data = bos.toByteArray();

// Setting up DatagramPacket
DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
socket.send(packet);

您永远不会通过网络发送dos的内容。 dos连接到bos因此写入dos任何内容都将进入与bos相关联的byte[] 此外, 调用writeUTF 之前 ,请提取bos的内容。 这是一次性的事情。 因此,在提取数组内容之后通过调用writeUTF ,可以确保file不会在该数组中。 如果调用writeUTF然后调用bos.toByteArray() ,则文件bos.toByteArray()位于数组中(但文件名将位于数组的最后,而不是第一个)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM