-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);
    }

这行不通。我没有得到任何例外,但没有调用网站构造器。

4

2 回答 2

1

您假设整个字节数组仅在一次调用中被读取read(),并且长度正好为 1024 字节。事实并非如此(除非你非常幸运)。此外,您的 ObjectInputStream 正在包装 InputStream ,您已经从中读取了构成消息的字节(或某些字节)。而且,发送方写入的字节不会被刷新。

不要忽略调用的结果is.read():它告诉您实际读取了多少字节。直到它不是-1,你应该继续阅读,循环。

阅读有关字节流的 Java 教程。

也就是说,你让事情变得困难。为什么不直接将对象写入socket输出流,直接从对方的socket输入流中读取对象呢?

于 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 回答