2

I want pass blob data to java server using web socket. My java server is:

providerSocket = new ServerSocket(2007, 10);
System.out.println("Waiting for connection");
connection = providerSocket.accept();
System.out.println("Connection received from " + connection.getInetAddress().getHostName());
out = new ObjectOutputStream(connection.getOutputStream());
out.flush();
in = new ObjectInputStream(connection.getInputStream());
sendMessage("Connection successful");

And my javascript client is:

var ws = new WebSocket("ws://127.0.0.1:2007");
ws.binaryType = "blob";
ws.onopen = function () { console.log("Openened connection to websocket"); };

ws.onmessage = function(e) {
    console.log(e.data);
};

function doneEncoding( blob ) { // blob is audio blob
    ws.send(blob);
}

Error is: in server

Connection received from 127.0.0.1
java.io.StreamCorruptedException: invalid stream header: 47455420
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
    at java.io.ObjectInputStream.<init>(Unknown Source)
    at server.Provider.run(Provider.java:21)
    at server.Provider.main(Provider.java:67)
Exception in thread "main" java.lang.NullPointerException
    at server.Provider.run(Provider.java:43)
    at server.Provider.main(Provider.java:67)

What is wrong? Help me. Thank you.

Usukhbaatar
  • 75
  • 1
  • 6

1 Answers1

4

The docs for ObjectInputStream say:

An ObjectInputStream deserializes primitive data and objects previously written using an ObjectOutputStream...

A random BLOB you are trying to send from a JavaScript program doesn't qualify as "primitive data and objects previously written using ObjectOutputStream" so, whatever you're trying to do with the BLOB, it's not gonna work.

What you want to do depends ultimately on what you are going to use the BLOB for, but you may want to read it into a byte array or something similar, as in:

InputStream in = connection.getInputStream();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int n;
for (n = in.read(buffer); 0 < n; n = in.read(buffer))
{
    out.write(buffer, 0, n);
}
out.flush();
byte[] blob = out.toByteArray();
Community
  • 1
  • 1
0xbe5077ed
  • 4,565
  • 6
  • 35
  • 77