通过套接字接收字节数组

时间:2012-04-11 07:02:50

标签: java

我有一个程序接受来自发送字节数组的电话的连接,我可以在制作时测试连接,但是我怎么知道我实际收到的东西?我怎么能“看到”是否有任何东西通过套接字发送。因为从我下面的代码中我无法创建生成的文件“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;
         }

}

1 个答案:

答案 0 :(得分:0)

如果另一端关闭套接字,in.read调用将仅返回-1。当套接字处于活动状态时,该调用将阻塞,直到有更多数据可用。

您需要做的是更改“协议”:客户端应先发送数组大小,然后再发送数据。服务器应该读取该长度,并在完成后停止读取文件(例如,返回等待下一个文件)。