Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PNG图像数据的Javax.ImageIO.IIOException_Java_Android_Tcp - Fatal编程技术网

PNG图像数据的Javax.ImageIO.IIOException

PNG图像数据的Javax.ImageIO.IIOException,java,android,tcp,Java,Android,Tcp,我正在用java实现一个服务器,它接收来自android应用程序的图像。基本上,它是从android emulator接收图像,而不是从android设备接收图像。从android emulator或android设备接收图像的所有过程都是在本地主机上完成的 这是我的服务器代码 public class Server { private static ServerSocket serverSocket; private static Socket clientSocket; private s

我正在用java实现一个服务器,它接收来自android应用程序的图像。基本上,它是从android emulator接收图像,而不是从android设备接收图像。从android emulator或android设备接收图像的所有过程都是在本地主机上完成的

这是我的服务器代码

public class Server {

private static ServerSocket serverSocket;
private static Socket clientSocket;
private static InputStreamReader inputStreamReader;
private static BufferedReader bufferedReader;
private static String message;
private static byte[] image;

public static void main(String[] args) throws UnknownHostException, IOException {
    try {
        serverSocket = new ServerSocket(4000); // Server socket

    } catch (IOException e) {
        System.out.println("Could not listen on port: 4000");
    }
    System.out.println("Server started. Listening to the port 4000");

    while (true) {
        clientSocket = serverSocket.accept(); // accept the client connection
        inputStreamReader = new InputStreamReader(clientSocket.getInputStream());
        bufferedReader = new BufferedReader(inputStreamReader); // get the client message
        DataInputStream inputFromClient = new DataInputStream(clientSocket.getInputStream());
        int count = inputFromClient.available();
        System.out.println(count);
        image = new byte[count];
        inputFromClient.readFully(image);
        final BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(image));
        ImageIO.write(bufferedImage, "jpg", new File("image.jpg"));
    }
}
例外情况

Exception in thread "main" javax.imageio.IIOException: Error reading PNG image data
at com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1308)
at com.sun.imageio.plugins.png.PNGImageReader.read(PNGImageReader.java:1577)
at javax.imageio.ImageIO.read(ImageIO.java:1448)
at javax.imageio.ImageIO.read(ImageIO.java:1352)
at server.Server.main(Server.java:39)

Caused by: java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:240)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
at java.io.BufferedInputStream.read(BufferedInputStream.java:334)
at java.io.DataInputStream.readFully(DataInputStream.java:195)
at com.sun.imageio.plugins.png.PNGImageReader.decodePass(PNGImageReader.java:1092)
at com.sun.imageio.plugins.png.PNGImageReader.decodeImage(PNGImageReader.java:1196)
at com.sun.imageio.plugins.png.PNGImageReader.readImage(PNGImageReader.java:1301)
... 4 more

Java Result: 1

在从android设备发送图像的情况下,我得到了javax.imageiio.exception的异常,但对于android emulator,它工作正常。请帮帮我。多谢各位

您的主要问题在这一行:

int count = inputFromClient.available();
它返回当时已接收的字节数。但是,服务器端可能有更多的字节等待传输。 因此,当您尝试加载传输的图像时,它会被截断/不完整

您现在有两个选择:

  • 在传输图像数据之前,发送一个包含数据长度的整数

  • 如果只传输一个映像,则在写入映像后关闭客户端上的流。在服务器端,您现在必须阅读,直到到达流的末尾


  • 发布您的例外please@DavidJhons我更新了我的帖子,但也有例外。