[英]NullPointerException when receiving an array list over a socket
[英]Receiving byte array over a socket
我有一個程序接受來自發送字節數組的電話的連接,我可以在建立連接時測試連接,但是我怎么知道我實際上收到了一些東西? 我如何“查看”是否有任何東西通過套接字發送。 因為從我下面的代碼中我無法創建結果文件“saved.jpg”。 這是否意味着它沒有收到任何東西?
public class wpsServer {
//vars
private int svrPort = 3334;
private ServerSocket serverSocket;
private Image image = null;
public wpsServer()
{
try {
serverSocket = new ServerSocket(svrPort);
System.out.println("Server started on "+svrPort);
}
catch (IOException e) {
System.out.println("Could not listen on port: "+svrPort);
System.exit(-1);
}
}
public void listenForClient()
{
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
if(clientSocket.isConnected())
System.out.println("Connected");
byte[] pic = getPicture(clientSocket.getInputStream());
InputStream in = new ByteArrayInputStream(pic);
BufferedImage image = ImageIO.read(in);
File outputfile = new File("saved.jpg");
ImageIO.write(image, "jpg", outputfile);
}
catch (IOException e) {
System.out.println("Accept failed: "+svrPort);
System.exit(-1);
}
}
public byte[] getPicture(InputStream in) {
try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] data = new byte[1024];
int length = 0;
while ((length = in.read(data))!=-1) {
out.write(data,0,length);
}
return out.toByteArray();
} catch(IOException ioe) {
//handle it
}
return null;
}
}
如果另一端關閉套接字,則in.read
調用只會返回-1
。 當套接字處於活動狀態時,該調用將阻塞,直到有更多數據可用。
你需要做的是改變你的“協議”:客戶端應該首先發送數組大小,然后是數據。 服務器應該讀取該長度,並在完成后停止讀取文件(例如返回等待下一個文件)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.