EOFException в readUTF
Я получаю ниже EOFException
при использовании readUTF()
метод, пожалуйста, дайте мне знать, как я могу решить эту проблему, а также, пожалуйста, предложите, как readUTF()
передает информацию о сокете по другим сетям
import java.io.*;
import java.net.*;
public class GreetingServer {
public static void main(String args[]) {
String servername =args[0];
int port = Integer.parseInt(args[1]);
try {
System.out.println("Server Name "+ servername +"Port"+port);
Socket client = new Socket(servername,port);
System.out.println("Just connected to"+ client.getRemoteSocketAddress());
OutputStream outs = client.getOutputStream();
DataOutputStream dout = new DataOutputStream(outs);
dout.writeUTF("Hello From"+client.getRemoteSocketAddress());
InputStream in = client.getInputStream();
DataInputStream din = new DataInputStream(in);
System.out.println("Server Says"+ din.readUTF());
client.close();
}
catch (EOFException f) {
f.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
2 ответа
Вы достигли конца потока. Больше нет данных для чтения.
Возможно, ваш сервер не использует writeUTF(),
или вы не синхронизированы с ним. Если сервер пишет строки, вы должны использовать BufferedReader.readLine().
Документы для readUtf()
государство;
Во-первых, два байта считываются и используются для создания 16-разрядного целого без знака точно так же, как метод readUnsignedShort. Это целочисленное значение называется длиной UTF и определяет количество дополнительных байтов, которые нужно прочитать. Эти байты затем преобразуются в символы, рассматривая их в группах. Длина каждой группы вычисляется из значения первого байта группы. Байт, следующий за группой, если он есть, является первым байтом следующей группы.
Это говорит мне о том, что то, что вы пытаетесь прочитать с помощью readUtf(), не является UTF, так как EOFException
происходит, когда конец файла (EOF) читается неожиданно.
Убедитесь, что вы читаете правильные типы в том же порядке, в котором ваш сервер отправляет их и т. Д. Вы должны следовать определенному протоколу, а не читать вслепую.