-1

これを見ていただけませんか?:

これは私のクライアントです:

try {
        Socket socket = new Socket("127.0.0.1", 3000);
        OutputStream out = socket.getOutputStream();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(mp3data);
        oos.close();

        byte[] bytes = baos.toByteArray();
        out.write(bytes);
        } 
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

これは私のサーバーです:

int port = 3000;
        try {
        ServerSocket clientConnect = new ServerSocket(port);
        System.out.println("SimpleServer running on port" + port);
        Socket clientSock = clientConnect.accept();
        InputStream is = clientSock.getInputStream();


    byte[] buffer = new byte[1024];
    int read = is.read(buffer);

    ObjectInputStream ois = new ObjectInputStream(is);
    MP3[] songs = (MP3[])ois.readObject();  

    clientSock.close();

    // HTML erzeugen
    Website site = new Website("index2.html",songs);

    } catch (Exception e) {
    System.out.println (e);
    }

それは動作しません。例外はありませんが、Website-Constructorは呼び出されません。

4

2 に答える 2

1

バイト配列全体がへの1回の呼び出しで読み取られread()、正確に1024バイトの長さであると想定します。そうではありません(あなたが非常に幸運でない限り)。さらに、ObjectInputStreamは、メッセージを構成するバイト(または一部のバイト)を既に読み取ったInputStreamをラップしています。また、送信者によって書き込まれたバイトはフラッシュされません。

次の呼び出しの結果を無視しないでくださいis.read()。実際に読み取られたバイト数がわかります。そして、-1になるまで、ループで読み続ける必要があります。

バイトストリームに関するJavaチュートリアルを読んでください。

そうは言っても、あなたは物事を難しくしています。オブジェクトをソケット出力ストリームに直接書き込み、反対側のソケット入力ストリームからオブジェクトを直接読み取ってみませんか?

于 2012-12-29T17:05:04.043 に答える
0
int port = 3000;
        try {
        ServerSocket clientConnect = new ServerSocket(port);
        System.out.println("SimpleServer running on port" + port);
        Socket clientSock = clientConnect.accept();
        InputStream is = clientSock.getInputStream();

        byte[] buffer = new byte[1024];

        for (int i = 0; i < buffer.length; i++) {
          int b = is.read();
          if (b  ==-1) break;
          buffer[i] = (byte) b;
        }

        ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer));
        MP3[] songs = (MP3[])ois.readObject();;
        ois.close();

        clientSock.close();
于 2012-12-31T12:33:46.230 に答える