Java 读取url地址时的EOFEException

Java 读取url地址时的EOFEException,java,Java,这是我读取从客户端发送的URL的代码: (服务器类) 但它有一个例外: java.io.EOFException at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340) at java.io.DataInputStream.readUTF(DataInputStream.java:589) at java.io.DataInputStream.readUTF(DataInputStream.java:564)

这是我读取从客户端发送的URL的代码:

(服务器类)

但它有一个例外:

java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
at java.io.DataInputStream.readUTF(DataInputStream.java:589)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at myp.T3Server.run(T3Server.java:37)
我在客户机类中编写为
UTF

更新

客户端类:

        Socket client = new Socket(serverName, portNumber);
        OutputStream outToServer = client.getOutputStream();
        DataOutputStream out = new DataOutputStream(outToServer);
        out.writeInt("http://localhost:8181/pic");
        client.close();
服务器类:

   Socket serverS = serverSocket.accept();
   DataInputStream in = new DataInputStream(serverS.getInputStream());
     if (in.readUTF().equalsIgnoreCase("http://localhost:8181")) { 
         System.out.println("its http://localhost:8181");
           serverS.close();
         } else if (in.readUTF().equals("http://localhost:8181/pic")) {  //Error here
           System.out.println("its pic");
            serverS.close();
         }
结果:

java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
at java.io.DataInputStream.readUTF(DataInputStream.java:589)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at myp.T3Server.run(T3Server.java:37)

快速阅读:您可能会发现您正在读取的流是空的。

从文件读取时,您并没有终止循环 抛出:

EOFEException-如果此输入流在读取八个字节之前到达末尾

IOException-流已关闭,并且包含的输入流在关闭后不支持读取,或者发生另一个I/O错误。

显然您需要一(1)个字符串,但您的代码

  if (in.readUTF().equalsIgnoreCase("http://localhost:8181")) {    // !!!!!!
     System.out.println("its http://localhost:8181");
       serverS.close();
     } else if (in.readUTF().equals("http://localhost:8181/pic")) {  // !!!!!
       System.out.println("its pic");
        serverS.close();
     }
如果第一个字符串不是预期值,则读取两(2)个字符串。这样做:

String reply = in.readUTF();
if( "http://localhost:8181".equalsIgnoreCase( reply ) ||
    "http://localhost:8181/pic".equalsIgnoreCase( reply ) ){
    // success
} else {
    // failure
}
in.close();
// etc

那代码会抛出错误还是什么?可能没有其他东西可读,您会遇到这样的异常。可能您没有在服务器上编写UTF字符串。另外,远程服务器写入url是出于某种原因吗?@ElliottFrisch我在客户端类中以UTF形式写入,甚至没有一个短的(包含以下UTF-8字节的数量)可读取。-如何连接和写入?@ElliottFrisch请参阅updateTerminate哪个循环?八字节?你回答了哪个问题?
String reply = in.readUTF();
if( "http://localhost:8181".equalsIgnoreCase( reply ) ||
    "http://localhost:8181/pic".equalsIgnoreCase( reply ) ){
    // success
} else {
    // failure
}
in.close();
// etc