Socket中使用Serializable发送出错。

AntGhazi 2001-11-09 02:09:13
1、
Socket中使用Serializable如下:
发送端:
CMessage myMsg=new CMessage();
myMsg.parType=1;
OutputStream os=mySocket .getOutputStream();
ObjectOutputStream out = new ObjectOutputStream(os);
out.writeObject(myMsg); //myMsg为自己定的的串化类
out.flush();
接收端:
try{
InputStream in=mySocket.getInputStream();
ObjectInputStream br = new ObjectInputStream(in);
CMessage str=(CMessage)br.readObject() ; //这条语句时出错
}catch(Exception){

}
不知原因为何?大家请帮看看哪里是否有写错?

public class CMessage implements java.io.Serializable{
public int parType=0; //父类型
public CMessage() {
}
}


2、在JB4的应用程序中使用jdbc,总会初始化不成功,而用计事本写的则没有问题,是何原因?且编译后使用java application也不能运行程序,报错如下:
C:\tomcat\webapps\ROOT\chat_2.0\Server\classes\server>java Server
Exception in thread "main" java.lang.NoClassDefFoundError: Server (wrong name: s
erver/Server)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
兄弟们可有解决方法?
...全文
165 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
俺的卤 2002-07-12
  • 打赏
  • 举报
回复
标签
AntGhazi 2001-11-12
  • 打赏
  • 举报
回复
多谢各位兄弟,分儿献上,敬请笑纳!
AntGhazi 2001-11-10
  • 打赏
  • 举报
回复
有可能是masterz所言,现在我改成用String类型对像发送。发现新问题
第一次服务器端可以接收到数据,成功,然第二次再发送的时侯服务器异常:Type code out of range, is -84

而且在客户端我用单步跟踪正常,而第二次的发送事件中的断点根本就没有执行

客户端发送事件: 第二次再次发送时没有执行(为何?)
ObjectOutputStream out= new ObjectOutputStream(myFrame.mySocket .getOutputStream());
String temp=new String("adf");
out.writeObject(temp);
out.flush() ;

接收端:
ObjectInputStream br=new ObjectInputStream(mySocket.getInputStream());
while(true){
String str=(String)br.readObject() ;
myParent.myFrame.tMemo.append(str) ;
}
masterz 2001-11-10
  • 打赏
  • 举报
回复
CMessage在服务器段和客户端要完全一样,两边CMessage类唯一不同的就是开头一句:
package Server与package Client,就使他们的标记不一样了,ObjectInputStream把他们当成不同的对象了

AntGhazi 2001-11-10
  • 打赏
  • 举报
回复
再试了一下,改用Vector发送,错误报告:Expecting code
AntGhazi 2001-11-10
  • 打赏
  • 举报
回复
刚才又试了一下,String发送没有问题
两边CMessage类唯一不同的就是开头一句:
package Server与package Client
是否有问题?
AntGhazi 2001-11-10
  • 打赏
  • 举报
回复
我使用String发送的没有问题
hicharlie 2001-11-10
  • 打赏
  • 举报
回复
可能你的java源文件是小写的server.java,在windows系列下有,这个问题,请检查看看。
hahaha88 2001-11-10
  • 打赏
  • 举报
回复
我忘了,你可以先发一个标准类试试,比如String,看看行不行?
hahaha88 2001-11-10
  • 打赏
  • 举报
回复
不能肯定,建议你检查一下:
- CMessage这个类是否在client/server两边都有,版本是否一致
- client/server两边的JVM是否类似?差的太远有时可能有问题
masterz 2001-11-09
  • 打赏
  • 举报
回复
import java.io.*;
import java.net.*;
public class Client
{
public static void main(String args[])
{
try
{
Socket mySocket =new Socket("127.0.0.1",1000);
System.out.println("Connect to 127.0.0.1:1000");
InputStream in=mySocket.getInputStream();
ObjectInputStream br = new ObjectInputStream(in);
CMessage str=(CMessage)br.readObject() ; //ÕâÌõÓï¾äʱ³ö´í
System.out.println("Read in object value:"+str.parType);
}
catch(Exception e)
{
e.printStackTrace();
}

}
}
masterz 2001-11-09
  • 打赏
  • 举报
回复
import java.io.*;
import java.net.*;

public class Server
{
public static void main(String args[])
{
try
{
ServerSocket sktserver=new ServerSocket(1000);
System.out.println("Listen on port 1000");
Socket mySocket=sktserver.accept();

CMessage myMsg=new CMessage();
myMsg.parType=1;
OutputStream os=mySocket.getOutputStream();
ObjectOutputStream out = new ObjectOutputStream(os);
out.writeObject(myMsg); //myMsgΪ×Ô¼º¶¨µÄµÄ´®»¯Àà
out.flush();
System.out.println("Output object value:"+myMsg.parType);
}
catch(Exception e)
{
e.printStackTrace();
}


}
}
AntGhazi 2001-11-09
  • 打赏
  • 举报
回复
请各位帮忙看看啊

刚才又try了一下,同时捕获Exception与IOException,错误是走Exception过,而并非IO错误
AntGhazi 2001-11-09
  • 打赏
  • 举报
回复
Manager是包名
CMessage是串化的类名
AntGhazi 2001-11-09
  • 打赏
  • 举报
回复
我是使用Exception捕获
e.getMessage()的结果是:Manager.CMessage
leolee 2001-11-09
  • 打赏
  • 举报
回复
对阿,我问报什么错阿
AntGhazi 2001-11-09
  • 打赏
  • 举报
回复
socket接收端的这条语句出错:
CMessage str=(CMessage)br.readObject() ; //这条语句时出错
leolee 2001-11-09
  • 打赏
  • 举报
回复
1。什么错

62,614

社区成员

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

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