0

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();
...
4

2 に答える 2

0

の内容をネットワーク経由で送信することはありませんdosdosに接続されてbosいるため、書き込まれたコンテンツは関連付けられているdosに移動します。さらに、その呼び出しを行う前にの内容を抽出します...これはライブ接続ではありません。それは一度きりです。したがって、配列の内容を抽出した後に呼び出すことで、がその配列に含まれないようにすることができます。呼び出してから呼び出す、ファイル名が配列に含まれます (ただし、配列の最初ではなく最後になります)。byte[]bosbos writeUTFwriteUTFfilewriteUTFbos.toByteArray()

于 2013-11-04T21:07:32.793 に答える