簡體   English   中英

通過套接字接收字節數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM