Ale*_*ani 2 java eofexception datainputstream
我编写了一个简单的服务器来监听客户端,当客户端连接时,它打开一个Datainputstream,读取客户端发送的所有数据(我的客户端的UTF数据).
这是ServerCode:
@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();
}
Run Code Online (Sandbox Code Playgroud)
它是非常基本的,我的客户端是一个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();
}
}
Run Code Online (Sandbox Code Playgroud)
当客户端连接到服务器时,一切都很完美.但是当我只点击一次客户端按钮时,发送的数据会显示在我的服务器日志中,但是在抛出异常后立即显示.
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)
Run Code Online (Sandbox Code Playgroud)
从Oracle文档中读取此异常将被抛出<>.但是我怎么能避免这个呢?
您正在发送一个字符串,然后关闭连接.您正在尝试阅读无限多的字符串.它们没有被发送.你得到的是预期的 EOFException.
这里没有问题需要解决.如果需要在同一连接上发送更多字符串,请不要在发送后再关闭它.
| 归档时间: |
|
| 查看次数: |
6845 次 |
| 最近记录: |