关于Java聊天程序通行问题!!麻烦大家帮忙看看!!拜谢!!!

lizongzhi 2010-06-10 09:18:39
我写了一个聊天程序,客户端向服务器发消息,服务器接收到后在强制转化为Message对象时会报 ClassNotFoundException的错误,但后来我调试发现
1:那个服务器和test.java 同时在eclipse 或netbeans 上 单机运行时就没有问题。
2:服务器和test.java 分别在eclipse 或netbeans 就会报错。
3:服务器和test.java 同时在eclipse 或netbeans 上 ,但是在两台机子间通信,也会出错。

我把代码精简了,麻烦大家帮忙看看!!!
在clientThread 中 Message message=(Message) link.input.readObject();报错
是不是我那个Message写错了??
麻烦大家帮忙看看!!!
拜谢!!!!!!!!!!!!!!!!!!!!!!!




public class ClientThread extends Thread {

private Link link;
private boolean isStop;

public ClientThread(Link link)
{
this.link=link;

isStop=false;
}
public void run()
{
while(!isStop)
{
try{

Message message=(Message) link.input.readObject();
switch(message.Type)
{
case Message.TALK_TO_FRIEND:
case Message.ADD_FRIEND:

}
}catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("没找到类");

} catch (IOException e) {
e.printStackTrace();
System.out.println("IO");
}

}
}
}

public class Link {

public Socket socket ;
public ObjectOutputStream output = null;
public ObjectInputStream input = null;
public Link next = null;



}

public class Message implements Serializable {

private static final long serialVersionUID = 1L;
//和好友聊天
public final static int TALK_TO_FRIEND=1;
//添加好友
public final static int ADD_FRIEND=2;
//更改用户信息
public final static int MODIFY_USER_INFO=3;
//在群中讲话
public final static int TALK_IN_GROUP=4;
//删除群成员
public final static int DELETE_MEMBER_IN_GROUP=5;
//建群
public final static int CREATE_GROUP=6;
//加入群
public final static int JOIN_GROUP=7;
//更改群信息
public final static int MODIFY_GROUP_INFO=8;
//登陆
public final static int LOGIN=9;
//注册
public final static int REGISTER=10;
//获得好友列表
public final static int GET_FRIEND_LIST=11;
//获得群列表
public final static int GET_GROUP_LIST=12;
//删除好友
public final static int DELETE_FRIEND=13;
//获得个人资料
public final static int SEARCH_USERS_ID=14;
//模糊查询
public final static int SEARCH_USERS_NAME=15;
//退出
public final static int EXIT=16;
//删除群
public final static int DELETE_GROUP=17;
//确认添加好友
public final static int CONFIRM_ADD_FIREND=18;
//服务器关闭
public final static int SERVER_STOP=19;


public int Type;
public String message;
public Font font;
public Color color;
public Object object1;
public Object object2;
public Message()
{
Type=0;
message=null;
font=null;
color=null;
object1=null;
object2=null;

}


}
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.*;
import java.sql.*;
import java.util.*;

public class Server {

private int port;
private String IP;
private ServerSocket serverSocket;
private ServerListener listener;
private boolean isStop;



public Server(int port)
{

this.port=port;


}


public void startServer()
{

try {
serverSocket = new ServerSocket(port);
System.out.println("Start Server");
this.listener=new ServerListener(serverSocket);
listener.start();

} catch (IOException e) {

e.printStackTrace();
}

}


public static void main(String[]args)
{
//开启服务器
Server server =new Server(8888);
server.startServer();
///建立客户端与服务器连接

}

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

/**
* @author li
*
*/
public class ServerListener extends Thread{

private ServerSocket server;


//服务器监听类
public ServerListener(ServerSocket server) {

this.server = server;

}

public void run(){
while(true){
try{

Link link = new Link();
//监听端口
link.socket = server.accept();
//初始化link 结构体
link.output = new ObjectOutputStream(link.socket.getOutputStream());
link.output.flush();
link.input = new ObjectInputStream(link.socket.getInputStream());
//初始化线程
ClientThread newThread=new ClientThread(link);
//开启线程
newThread.start();

}
catch(Exception e){
}
}
}

}
public class Test {

/**
* @param args
*/
public static void main(String[] args) {


try {

Socket socket =new Socket("127.1.0.0",8888);
ObjectOutputStream output= new ObjectOutputStream(socket.getOutputStream());



Message message=new Message();
message.Type=Message.LOGIN;
output.writeObject(message);
output.flush();




} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}


}

}
...全文
125 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
niejimaoo 2010-06-17
  • 打赏
  • 举报
回复
lizongzhi 2010-06-17
  • 打赏
  • 举报
回复
谢谢大家了!我已经解决了!
是两个地方的message 没有放在一个包里!
xiesisi3 2010-06-11
  • 打赏
  • 举报
回复
1、请把你出的问题尽量再描述详细一点,比如说是不能绑定端口,不能连上服务器之类的,每一种情况出现的错误都稍微说明一下。
2、如果是局域网内不同机器,可以的话,请先把防火墙关掉,或者首先保证能ping通
3、3楼说的不是重点,不同编译器版本间也是可以通讯的,程序间的通讯本身就与代码类型无关。
truediego 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 lizongzhi 的回复:]
1:那个服务器和test.java 同时在eclipse 或netbeans 上 单机运行时就没有问题。
2:服务器和test.java 分别在eclipse 或netbeans 就会报错。
3:服务器和test.java 同时在eclipse 或netbeans 上 ,但是在两台机子间通信,也会出错。
[/Quote]

光说了服务器和test.java,出问题的Message.java你有没有放啊?
第3点,两台机子间通信,报什么错?也是ClassNotFound?应该不是吧
黎某人 2010-06-11
  • 打赏
  • 举报
回复
如果需要传送一个Message类的话 请将Message类复制两份 放到客户端和服务器下
这样可以解决好不到Class的问题

但是这样又会有一个问题, 客户端或者服务器怎么知道就是同一个Message呢,
在复制之前给Message类加上implements Serializable 序列化接口 不用实现他,

之前也遇到做着问题 我就是这么解决的
Java技术栈 2010-06-11
  • 打赏
  • 举报
回复
看下马士兵的聊天系统吧。。
  • 打赏
  • 举报
回复
你使用的编译版本是不是一致的呢?
goodmrning 2010-06-11
  • 打赏
  • 举报
回复
mark!!!!!!!!!!!!!
gloomyfish 2010-06-11
  • 打赏
  • 举报
回复
什么时候才能学会排版啊
System.out.println("how to read your program")

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧