使用 readUTF 的 EOFException DataInputStream
EOFException DataInputStream using readUTF
我已经编写了一个简单的服务器来侦听客户端,当客户端连接时,它会打开一个 Datainputstream,读取从客户端发送的所有数据(我的客户端 wirte UTF 数据)。
这是服务器代码:
@Override
public void run() {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(7000);
while(true){
System.out.println("Il Server sta cercando Connessioni");
Socket s = ss.accept();
System.out.println("Il Server ha accettato un Client");
Thread t2 = new Thread(new Runnable(){
public void run(){
try {
while(true){
DataInputStream dis = new DataInputStream(s.getInputStream());
isAlreadyOpened = true;
System.out.println(dis.readUTF());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
isAlreadyOpened = false;
}
}
});
if(!isAlreadyOpened){
t2.start();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是非常基础的,我的客户端是一个 Andorid 应用程序,它在单击按钮时发送数据:
@Override
public void onClick(View v) {
try {
DataOutputStream out = new DataOutputStream(s.getOutputStream());
out.writeUTF("Testiamo sto socket");
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
当客户端连接到服务器时,一切都很完美。但是,当我只单击一次客户端按钮时,发送的数据显示在我的服务器日志中,但在抛出异常后立即显示。
Il Server sta cercando Connessioni
Il Server ha accettato un Client
Il Server sta cercando Connessioni
Testiamo sto socket
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
从 Oracle 文档中读取此异常被抛出 <>。
但是我怎样才能避免这种情况呢?
您正在发送一个字符串,然后关闭连接。您正在尝试读取无限多的字符串。他们没有被发送。你得到的是 expected EOFException.
这里没有问题可以解决。如果您需要通过同一个连接发送更多字符串,发送一个后不要关闭它。
虽然这不是 Alesso 的问题,但 EOFException 可能发生的另一种方式是:
您打开文件的输出流,然后打开同一文件的输入流,而没有先关闭输出流。
我已经编写了一个简单的服务器来侦听客户端,当客户端连接时,它会打开一个 Datainputstream,读取从客户端发送的所有数据(我的客户端 wirte UTF 数据)。
这是服务器代码:
@Override
public void run() {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(7000);
while(true){
System.out.println("Il Server sta cercando Connessioni");
Socket s = ss.accept();
System.out.println("Il Server ha accettato un Client");
Thread t2 = new Thread(new Runnable(){
public void run(){
try {
while(true){
DataInputStream dis = new DataInputStream(s.getInputStream());
isAlreadyOpened = true;
System.out.println(dis.readUTF());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
isAlreadyOpened = false;
}
}
});
if(!isAlreadyOpened){
t2.start();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这是非常基础的,我的客户端是一个 Andorid 应用程序,它在单击按钮时发送数据:
@Override
public void onClick(View v) {
try {
DataOutputStream out = new DataOutputStream(s.getOutputStream());
out.writeUTF("Testiamo sto socket");
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
当客户端连接到服务器时,一切都很完美。但是,当我只单击一次客户端按钮时,发送的数据显示在我的服务器日志中,但在抛出异常后立即显示。
Il Server sta cercando Connessioni
Il Server ha accettato un Client
Il Server sta cercando Connessioni
Testiamo sto socket
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
从 Oracle 文档中读取此异常被抛出 <>。 但是我怎样才能避免这种情况呢?
您正在发送一个字符串,然后关闭连接。您正在尝试读取无限多的字符串。他们没有被发送。你得到的是 expected EOFException.
这里没有问题可以解决。如果您需要通过同一个连接发送更多字符串,发送一个后不要关闭它。
虽然这不是 Alesso 的问题,但 EOFException 可能发生的另一种方式是:
您打开文件的输出流,然后打开同一文件的输入流,而没有先关闭输出流。