Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.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
Java:Android-Server套接字EOFEException与Objectstream_Java_Android_Sockets - Fatal编程技术网

Java:Android-Server套接字EOFEException与Objectstream

Java:Android-Server套接字EOFEException与Objectstream,java,android,sockets,Java,Android,Sockets,我对服务器套接字相当陌生,试图学习如何编写套接字(我过去有使用winsock之类的套接字的经验,但这是我第一次真正用java编写套接字) 这就是我一直遇到的错误: Couldn't get I/O for the connection to: 0 java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$Block

我对服务器套接字相当陌生,试图学习如何编写套接字(我过去有使用winsock之类的套接字的经验,但这是我第一次真正用java编写套接字)

这就是我一直遇到的错误:

Couldn't get I/O for the connection to: 0
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source)
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
在过去的测试中,我能够连接到服务器,但是因为我想在操作之前检查输入数据类型,所以我得到了这个结果


感谢您的帮助:)

EOFEException只意味着您已经到达了流的末尾。这很正常

您的问题是,对于每个编写的对象,您都要阅读两次:一次获取其类,另一次获取对象。你不会再得到同一个对象,你会得到下一个对象,所以你最终会用完

您需要将readObject()的结果存储在一个变量中,然后测试它的类,然后适当地强制转换它

public static void main(String args[]) {
    ServerSocket MyService = null;
    Socket clientSocket = null;
    Integer clientNum = 0;
    Integer inputID, outputID;

        try {
            MyService = new ServerSocket(hidden);
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {

            clientSocket = MyService.accept();

            ObjectInputStream input = new ObjectInputStream(clientSocket.getInputStream());
            ObjectOutputStream output = new ObjectOutputStream(clientSocket.getOutputStream());


            Float inputFloat = null;
            Float outputFloat = null;

            Protocol protocol = new Protocol();

            outputFloat = protocol.processFloatInput(null);

            while(true) {
                if(input.readObject().getClass().equals(inputFloat.getClass())) {
                    System.out.println("true");
                    if ((inputFloat = input.readFloat()) != null) {
                        outputFloat = protocol.processFloatInput(inputFloat);
                        output.writeObject(outputFloat);
                        System.out.println("Float value = " + inputFloat);

                    }
                    input.close();
                    output.flush();
                    output.close();
                }
                if(input.readObject().getClass().equals(Integer.TYPE)) {
                    if ((inputID = input.readInt()) != null) {
                        outputID = protocol.processIntegerInput(inputID);
                        output.writeObject(inputID);
                        System.out.println("Client " + outputID + " connected.");

                    }
                    input.close();
                    output.flush();
                    output.close();
                }
            }

        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: hostname");
        } catch (IOException e) {
            //Error printed
            System.err.println("Couldn't get I/O for the connection to: " + clientNum);
            e.printStackTrace();
        } catch (Exception e) {

            e.printStackTrace();
        }   


};