这是我读取客户端发送的URL的代码:
(服务器类)
Socket serverS = serverSocket.accept();
DataInputStream in = new DataInputStream(serverS.getInputStream())
if(in.readUTF().equals("http://localhost:8181")){
// do something
}
但它有一个例外:
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)
答案 0 :(得分:1)
显然你期望一(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
答案 1 :(得分:0)
快速阅读:Class EOFException您可能会发现您正在阅读的信息流为空。
答案 2 :(得分:0)
从文件中读取时,您的循环不会终止 抛出:
EOFException - 如果此输入流在读取八个字节之前到达结尾。
IOException - 流已关闭且包含的输入流在关闭后不支持读取,或发生另一个I / O错误。