欢迎使用CSDN-markdown编辑器

用Socket实现一个简单的P2P通讯软件,本来没什么难的,但碰到这个ClassNotFound问题确实困扰了我很久,解决后,到博客记下来。
客户端的代码如下:

//设置客户端的信息
        ClientInfo clientInfo  = new  ClientInfo();
        clientInfo.setIP("127.0.0."+new Random().nextInt(256));
        clientInfo.setPort(9211);
        clientInfo.setClientName(clientInfo.getIP());


            System.out.println("发送客户端的IP信息到服务器");
            //将客户端的基本信息发送给服务器
            Socket so= new Socket("127.0.0.1", 9999);
            ObjectOutputStream oos=new ObjectOutputStream(so.getOutputStream());
            oos.writeObject(clientInfo);
            oos.flush();

其中clientInfo是个对象,发送的时候没问题。但是服务器端接受,并要自动开箱封装的时候,报错了。上服务端代码:

s = ss.accept();
                // 接收客户端发来的信息.
                ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
                ClientInfo clientInfo = (ClientInfo)ois.readObject();

最后一句报ClassNotFound的错误。提示找不到ClientInfo这个类,包名提示的确实客户端的位置,在服务器端当然找不到了,我一开始以为是序列没有统一,加上Serializable后,还是不行,没办法,只好将这个ClientInfo类提出来,提到src下的comm包中,这样客户端和服务器端定位这个类的时候,都是package org.comm。最终问题解决。

PS:我觉得这样不是一个很好的方法,会破坏软件结构,一开始并没有考虑到会有这个问题,认为在客户端和服务器端的ClientInfo类是一模一样的,就没什么问题了,但开箱的时候居然去找封箱时用的那个类,我也是醉了。希望有大神不吝赐教,小菜鸟在此先谢过了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值