当前位置: 首页 > 知识库问答 >
问题:

UDP示例给出java.lang.ClassNotFoundException:PackageName.foo异常;如何修复?

彭阳朔
2023-03-14

我是UDP协议的新手,我想学习一个很好的例子。我终于找到了一个很好的示例,但它给出了java.lang.ClassNotFoundException:packageName.student异常

我首先运行服务器,然后运行客户端。

客户端输出:

来自客户端的消息
来自服务器的响应:谢谢您的消息-------------

上面的----大行

服务器输出:

java.lang.ClassNotFoundexception:ex_udp_client.student在java.net.urlClassLoader$1上运行(urlClassLoader.java:366)在java.net.urlClassLoader$1上运行(urlClassLoader.java:355)在java.security.accessController.doprivileged(本机方法)在java.net.urlClassLoader.findClass(本机方法)在java.net.urlClassLoader.java:354)在dp_server.udpsocketserver.createandlistensocket(udpsocketserver.java:40)在ex_udp_server.udpsocketserver.main(udpsocketserver.java:72)上生成成功(总时间:6秒)

我认为在这一行抛出的异常:
student student=(student)is.readObject();

如何修复?

复制到客户端和服务器包的可序列化类

import java.io.Serializable;

public class Student implements Serializable
{

   public Student(int id, String name, String address1)
   {
      this.id = id;
      this.name = name;
      this.addressLine = address1;
   }
   private static final long serialVersionUID = 1L;
   private int id;
   private String name;
   private String addressLine;

   public int getId()
   {
      return id;
   }

   public void setId(int id)
   {
      this.id = id;
   }

   public String getName()
   {
      return name;
   }

   public void setName(String name)
   {
      this.name = name;
   }

   public String getAddressLine()
   {
      return addressLine;
   }

   public void setAddressLine(String addressLine)
   {
      this.addressLine = addressLine;
   }

   public String toString()
   {
      return "Id = " + getId() + " Name = " + getName() + " Address = " + getAddressLine();
   }
}

Server类

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UDPSocketServer
{

   DatagramSocket socket = null;

   public UDPSocketServer()
   {
   }

   public void createAndListenSocket()
   {
      try
      {
         socket = new DatagramSocket(9876);
         byte[] incomingData = new byte[1024];

         while (true)
         {
            DatagramPacket incomingPacket = new DatagramPacket(incomingData, incomingData.length);
            socket.receive(incomingPacket);
            byte[] data = incomingPacket.getData();
            ByteArrayInputStream in = new ByteArrayInputStream(data);
            ObjectInputStream is = new ObjectInputStream(in);
            try
            {
               Student student = (Student) is.readObject();
               System.out.println("Student object received = " + student);
            } catch (ClassNotFoundException e)
            {
               e.printStackTrace();
            }
            InetAddress IPAddress = incomingPacket.getAddress();
            int port = incomingPacket.getPort();
            String reply = "Thank you for the message";
            byte[] replyBytea = reply.getBytes();
            DatagramPacket replyPacket =
                    new DatagramPacket(replyBytea, replyBytea.length, IPAddress, port);
            socket.send(replyPacket);
            Thread.sleep(2000);
            System.exit(0);
         }

      } catch (SocketException e)
      {
         e.printStackTrace();
      } catch (IOException i)
      {
         i.printStackTrace();
      } catch (InterruptedException e)
      {
         e.printStackTrace();
      }
   }

   public static void main(String[] args)
   {
      UDPSocketServer server = new UDPSocketServer();
      server.createAndListenSocket();
   }
}

客户端类

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.*;

public class UDPSocketClient
{

   DatagramSocket Socket;

   public UDPSocketClient()
   {
   }

   public void createAndListenSocket()
   {
      try
      {

         Socket = new DatagramSocket();
         InetAddress IPAddress = InetAddress.getByName("localhost");
         byte[] incomingData = new byte[1024];
         Student student = new Student(1, "Bijoy", "Kerala");
         ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
         ObjectOutputStream os = new ObjectOutputStream(outputStream);
         os.writeObject(student);
         byte[] data = outputStream.toByteArray();
         DatagramPacket sendPacket = new DatagramPacket(data, data.length, IPAddress, 9876);
         Socket.send(sendPacket);
         System.out.println("Message sent from client");
         DatagramPacket incomingPacket = new DatagramPacket(incomingData, incomingData.length);
         Socket.receive(incomingPacket);
         String response = new String(incomingPacket.getData());
         System.out.println("Response from server:" + response);
         Thread.sleep(2000);

      } catch (UnknownHostException e)
      {
         e.printStackTrace();
      } catch (SocketException e)
      {
         e.printStackTrace();
      } catch (IOException e)
      {
         e.printStackTrace();
      } catch (InterruptedException e)
      {
         e.printStackTrace();
      }
   }

   public static void main(String[] args)
   {
      UDPSocketClient client = new UDPSocketClient();
      client.createAndListenSocket();
   }
}

共有2个答案

汝天宇
2023-03-14

您是在服务器中还是在客户端中得到这个异常?
在这两个中的任何一个中,都意味着在运行时(在客户端或服务器中)没有
这个类。
我的意思是,类路径上没有它。

暴奕
2023-03-14

复制到客户端和服务器包的可序列化类

这就是问题所在。一个名为client.student的类与server.student不同,不管源代码怎么说。您需要在适当的目录中拥有该类的一个副本,并将.class文件部署到服务器和客户端。

 类似资料:
  • 我们的示例应用程序将打开一个文件,将每一行作为消息通过 UDP 发到指定的端口。如果你熟悉类 UNIX 操作系统,可以认为这是一个非常标准的简化版本 “syslog(系统日志)”。“UDP ,是一个完美的适合这样的应用程序,因为偶尔丢失一行日志文件可以被容忍,因为文件本身存储在文件系统中。此外,应用程序提供了非常有价值的能力有效地处理大量的数据。 UDP 广播使添加新事件“监视器”接收日志消息一样

  • 问题内容: 我正在尝试将XML发送到服务器并取回XML。有什么办法可以解决/忽略此异常吗? 我知道状态行为空,这会引发此错误。 问题答案: 尝试看看您的服务器实际上返回了什么!它可能不是有效的HTTP响应。您可以使用以下方式将原始的http请求发送到服务器: 响应应类似于:

  • 另一方面,如果我们这样写,就没有并发修改异常!注意,代码完全相同,除了用于比较的字符串,在第一个示例中是代码,在第二个示例中是Java 我使用的是Netbeans 8.2,Windows 7 32bit,JDK 1.8.0_131有什么问题吗?

  • 在你可以捕获异常之前,一些代码必须抛出一个异常。任何代码都可能会抛出异常:您的代码,来自其他人编写的包(例如Java平台附带的包)或Java运行时环境的代码。无论是什么引发的异常,它总是通过 throw 语句抛出。 您可能已经注意到,Java平台提供了许多异常类。所有类都是Throwable类的后代,并且都允许程序区分在程序执行期间可能发生的各种类型的异常。 您还可以创建自己的异常类来表示在您编写

  • 我正在尝试使用jena库为语义网编写java web爬虫程序。我已经使用Netbeans构建了一个项目。我收到两个错误: > 未能实例化SLF4J LoggerFactory报告的异常:java。lang.NoClassDefFoundError:org/apache/log4j/Level 无法初始化类com。惠普。hpl。耶拿。rdf。模型impl。modelorg。slf4j。伐木厂。绑定(