Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用ObjectInputStream上的readObject()时发生ClassNotFoundException_Java_Sockets_Networking_Server - Fatal编程技术网

Java 调用ObjectInputStream上的readObject()时发生ClassNotFoundException

Java 调用ObjectInputStream上的readObject()时发生ClassNotFoundException,java,sockets,networking,server,Java,Sockets,Networking,Server,我正在为一个棋盘游戏制作一个超级简单的服务器。它是一个客户端连接,为我创建的Board对象创建一个输入流并将其发送回。每当我在服务器或客户机中调用readObject时,就会出现java.lang.ClassNotFoundException错误。这是什么原因造成的 服务器套接字 import java.net.*; import java.io.*; public class GreetingServer extends Thread { private ServerSocket se

我正在为一个棋盘游戏制作一个超级简单的服务器。它是一个客户端连接,为我创建的Board对象创建一个输入流并将其发送回。每当我在服务器或客户机中调用readObject时,就会出现java.lang.ClassNotFoundException错误。这是什么原因造成的

服务器套接字

import java.net.*;
import java.io.*;

public class GreetingServer extends Thread {
   private ServerSocket serverSocket;

   public GreetingServer(int port) throws IOException {
      serverSocket = new ServerSocket(port);
      //serverSocket.setSoTimeout(10000);  //Don't timeout
   }

   public void run() {
      while(true) {
         try {
            PlayerBoard board;
            System.out.println("Waiting for client on port " + 
               serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();

            System.out.println("Just connected to " + server.getRemoteSocketAddress());
            ObjectInputStream in = new ObjectInputStream(server.getInputStream());

            //Get PlayerBoard Object from server.
            board = (PlayerBoard)in.readObject();      //LINE THAT GIVES ME EXCEPTION

            //Send PlayerBoard back
            ObjectOutputStream out = new ObjectOutputStream(server.getOutputStream());
            out.writeObject(board);

            //Close server
            server.close();

         }catch(SocketTimeoutException s) {
            System.out.println("Socket timed out!");
            break;
         }catch(IOException e) {
            e.printStackTrace();
            break;
         }
      }
   }

   public static void main(String [] args) {
      int port = 25565;
      try {
         Thread t = new GreetingServer(port);
         t.start();
      }catch(IOException e) {
         e.printStackTrace();
      }
   }
}
客户端套接字

import apcslib.*;
import java.net.*;
import java.io.*;

public class GreetingClient {

   public static void main(String [] args) {
      String serverName = "76.88.3.218";
      PlayerBoard board;
      int port = 25565;
      try {
         System.out.println("Connecting to " + serverName + " on port " + port);
         Socket client = new Socket(serverName, port);

         System.out.println("Just connected to " + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         ObjectOutputStream out = new ObjectOutputStream(outToServer);

         //Send server PlayerBoard object
         out.writeObject(new PlayerBoard());

         InputStream inFromServer = client.getInputStream();
         ObjectInputStream in = new ObjectInputStream(inFromServer);

         //Get PlayerBoard object back from server
         board = (PlayerBoard)in.readObject(); //LINE THAT GIVES ME EXCEPTION

         /*Loop to print out board to console
         System.out.println("Board:");
         System.out.print("   ");

         for(int y = 1; y <= board.getWidth(); y++)
         {
            System.out.print(y + " ");
         }
         System.out.println();
         for(int y = 0; y < board.getHeight(); y++)
         {
            System.out.print(Format.left(y+1, 3));
            for (int x = 0; x < board.getWidth(); x++)
               System.out.print(board.displaySpot(x, y) + " ");
            System.out.println();
         }*/

         //Close connection
         client.close();
      }catch(IOException e) {
         e.printStackTrace();
      }
   }
}
导入apcslib.*;
导入java.net。*;
导入java.io.*;
公共类迎宾客户端{
公共静态void main(字符串[]args){
字符串serverName=“76.88.3.218”;
游戏板;
int端口=25565;
试一试{
System.out.println(“连接到端口“+端口上的“+serverName+”);
套接字客户端=新套接字(服务器名、端口);
System.out.println(“刚刚连接到”+client.getRemoteSocketAddress());
OutputStream outToServer=client.getOutputStream();
ObjectOutputStream out=新的ObjectOutputStream(outToServer);
//发送服务器Playboard对象
out.writeObject(新的Playboard());
InputStream INFOROMSERVER=client.getInputStream();
ObjectInputStream in=新的ObjectInputStream(INFOROMSERVER);
//从服务器获取Playboard对象
board=(Playboard)in.readObject();//给出异常的行
/*循环打印输出板到控制台
System.out.println(“板:”);
系统输出打印(“”);

对于(int y=1;y我对正在发生的事情有一个想法,但是作为参考,你能把你的
游戏板
类放上去吗

参考我的想法:见

以下是确保您能够正确读取对象的通用解决方案。如果服务器和客户端位于不同的项目中,则有两种方法可以实现正确的结果:

  • 您必须有两个相同的
    Playboard
    类(具有相同的软件包名称)
  • playboard
    位于您提供给服务器和客户端项目的共享jar中
  • 对于您的演示(更有可能),如果您在同一个项目中同时拥有服务器和客户机,那么您就不需要担心上述考虑事项


    剩下的就是:
    playboard
    必须实现
    Serializable
    。如果你有两个
    playboard
    类,那么两个类都必须以相同的方式实现
    Serializable

    我知道发生了什么,但是你能把你的
    playboard
    类放上去吗

    参考我的想法:见

    以下是确保您能够正确读取对象的通用解决方案。如果服务器和客户端位于不同的项目中,则有两种方法可以实现正确的结果:

  • 您必须有两个相同的
    Playboard
    类(具有相同的软件包名称)
  • playboard
    位于您提供给服务器和客户端项目的共享jar中
  • 对于您的演示(更有可能),如果您在同一个项目中同时拥有服务器和客户机,那么您就不需要担心上述考虑事项


    剩下的就是:
    playboard
    必须实现
    Serializable
    。如果您有两个
    playboard
    类,那么这两个类都必须以相同的方式实现
    Serializable

    您能为exception@Ishnark这就是IntelliJ告诉我的错误:(28,44)java:unreported exception java.lang.ClassNotFoundException;必须被捕获或声明为Thrown您可以为exception@Ishnark这就是IntelliJ告诉我的错误:(28,44)java:未报告的异常java.lang.ClassNotFoundException;必须捕获或声明为ThrownPlayboard未实现可序列化。感谢帮助。Playboard未实现可序列化。感谢帮助。