0

我有一个程序,它接受来自发送字节数组的手机的连接,我能够在连接时测试连接,但是我怎么知道我实际上正在接收什么东西?我如何“查看”是否有任何东西通过套接字发送。因为从我下面的代码中,我无法创建结果文件“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;
         }

}
4

1 回答 1

0

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

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

于 2012-04-11T07:05:54.170 回答