捕获 dataInputStream.readUTF();时出现问题



我正在制作一个Java程序,使我的计算机成为通过WiFi与智能手机通信的服务器。因此,我使用 Socket 类,如下面的代码所示(基于 Android-er):

package main;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerCommunication {
    @SuppressWarnings("resource")
    public static void main(String[] args){
        ServerSocket serverSocket = null;
        Socket clientSocket = null;
        DataInputStream dataInputStream = null;
        DataOutputStream dataOutputStream = null;
        String message = null;
        try {
            int portNumber = 8888;
            serverSocket = new ServerSocket(portNumber);
            System.out.println("Listening :" + Integer.toString(portNumber));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        while(true){
            try {
                clientSocket = serverSocket.accept();
                dataInputStream = new DataInputStream(clientSocket.getInputStream());
                dataOutputStream = new DataOutputStream(clientSocket.getOutputStream());
                System.out.println("ip: " + clientSocket.getInetAddress());
                System.out.println("message: " + dataInputStream.readUTF());
                dataOutputStream.writeUTF("test");
                message = dataInputStream.readUTF(); // <--- PROBLEM LINE
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            finally{
                if( clientSocket!= null){
                    try {
                        clientSocket.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if( dataInputStream!= null){
                    try {
                        dataInputStream.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
                if( dataOutputStream!= null){
                    try {
                        dataOutputStream.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

当文件中不存在问题行(用 <--- 表示)时,一切正常。我收到的消息已正确打印在控制台中。但是从我想将此消息存储在字符串中的那一刻起,我得到了一个java.io.EOFException...

谁能告诉我为什么我可以打印消息,但不能将其存储为字符串?

提前感谢!

异常java.io.EOFException说流中的所有数据都被读取,看起来你正在尝试使用数据两次,一次在下面的语句中,

System.out.println("message: " + dataInputStream.readUTF());

下一个在,

dataInputStream.readUTF()
要么

从写入端(客户端)写入更多数据,要么使用一次数据。希望对您有所帮助。

一旦你打电话

  dataInputStream.readUTF();

它弹出字符串,然后打印该字符串。然后在第二次调用中,由于输出流中没有更多数据,因此会发生文件结束异常。

您可以尝试将弹出的字符串存储到变量中,然后打印它:

String  message = dataInputStream.readUTF();
System.out.println("message: " + message);

删除问题行

message = dataInputStream.readUTF();//<--- PROBLEM LINE

相关内容

  • 没有找到相关文章

最新更新