2013-05-08 56 views
2

我想使用web套接字將blob數據傳遞給java服務器。 我的Java服務器是:設置標頭網頁套接字?

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

我的JavaScript客戶端是:

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

錯誤是:在服務器

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) 

有什麼不對?幫我。謝謝。

回答

4

該文檔爲ObjectInputStream說:

的ObjectInputStream的反序列化的基本數據和使用ObjectOutputStream以前寫過對象...

你正試圖從一個JavaScript發送隨機BLOB程序不符合「以前使用ObjectOutputStream編寫的原始數據和對象」,所以無論您想要如何使用BLOB,它都無法工作。

你想要做什麼最終取決於您要使用的BLOB什麼,但你可能要read it into a byte array或類似的東西,如:

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