首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ObjectInputStream#readObject抛出java.io.EOFException

ObjectInputStream#readObject抛出java.io.EOFException
EN

Stack Overflow用户
提问于 2017-03-06 02:04:50
回答 3查看 821关注 0票数 0

当我试图从客户端向服务器发回数据时(它可以被看作是一种POST,尽管我没有使用http),我得到了一个java.io.EOFException

我的客户源码:

代码语言:javascript
复制
Socket clientSocket = new Socket(serverIpAddr, IConstant.ServerPort);
OutputStream out = clientSocket.getOutputStream();
out.write(dataByteArray);
out.flush();
if(out!=null)
    out.close();
if(clientSocket!=null)
    clientSocket.close();

我的服务器源代码:

代码语言:javascript
复制
try{    
      ServerSocket serverSocket = new ServerSocket(IConstant.ServerPort);
      while(true)
      {
           Socket connectionSocket = serverSocket.accept();
           ObjectInputStream ois = new ObjectInputStream(connectionSocket.getInputStream());
           Object obj = ois.readObject();
           byte[] bytes = (byte[])obj;
           System.out.println("A notification has been received");
           //process bytes
           //...
       }
} catch(IOException ex){
     ex.printStackTrace();  
} catch (ClassNotFoundException e) {
     e.printStackTrace();
}

下面是我构建dataByteArray对象的方法(其中PlayList是一个实现java.io.Serializable的POJO ):

代码语言:javascript
复制
private byte[] serializePlayList(PlayList playList) throws IOException{
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        byte[] byteArray = null;
        ObjectOutput out = null;
        try {
          out = new ObjectOutputStream(bos);   
          out.writeObject(playList);
          out.flush();
          byteArray = bos.toByteArray();
        } finally {
          try {
            bos.close();
          } catch (IOException ex) {
          }
        }
        return byteArray;
    }

每当服务器尝试执行ois.readObject()时,都会抛出java.io.EOFException。有谁能解释一下原因吗?

EN

Stack Overflow用户

发布于 2017-10-25 00:37:18

您应该在Object中发送playList

客户端:

代码语言:javascript
复制
Socket clientSocket = new Socket(serverIpAddr, IConstant.ServerPort);
ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream();
out.writeObject(playlist);

服务器:

代码语言:javascript
复制
ServerSocket serverSocket = new ServerSocket(IConstant.ServerPort);
Socket connectionSocket = serverSocket.accept();
ObjectInputStream ois = new ObjectInputStream(connectionSocket.getInputStream());
PlayList playList = (PlayList) ois.readObject();
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42611998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档