为什么ObjectOutput出错呀

xuxiangbin 2003-10-18 08:53:23
我实验一个 client和server通信的例子 原码如下:

client段:

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

public class Socketmsg extends Socket implements Runnable{

private Socket sock=null;
private ObjectInputStream in=null;
private ObjectOutputStream out=null;
private String receiveMsg;
private Controlpane controlpane;

public Socketmsg(Controlpane controlpane){
this.controlpane=controlpane;
try{
sock=new Socket("10.15.42.222",5555);
}catch(UnknownHostException e){
}
catch (IOException e){
}
new Thread(this).start() ;
}

public void sendMsg(String message){
try{
out=new ObjectOutputStream(sock.getOutputStream());
out.writeObject(message);
}catch(IOException e){
}
}

public void run(){
try{
while(true){
in=new ObjectInputStream(sock.getInputStream() );
receiveMsg=(String)in.readObject() ;
controlpane.setmessagePane(receiveMsg);
}
}catch(Exception e){
}

}


}


server端:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Hashtable;

public class MsgServer implements Runnable
{
private ServerSocket ss;
private Hashtable outputStreams;

public MsgServer(int i)
throws IOException
{
outputStreams = new Hashtable();
ss = new ServerSocket(i);
new Thread(this).start() ;
}

public void run()
{
try{
System.out.println("Listening on " + ss);
do
{
Socket socket = ss.accept();
System.out.println("Connection from " + socket);
ObjectOutputStream dataoutputstream = new ObjectOutputStream(socket.getOutputStream());
outputStreams.put(socket, dataoutputstream);
new MsgServerThread(this, socket);
} while(true);
}catch(IOException e){

}
}

Enumeration getOutputStreams()
{
return outputStreams.elements();
}

void sendToAll(String s)
{
synchronized(outputStreams)
{
for(Enumeration enumeration = getOutputStreams(); enumeration.hasMoreElements();)
{
ObjectOutputStream dataoutputstream = (ObjectOutputStream)enumeration.nextElement();
try
{
dataoutputstream.writeObject(s);
}
catch(IOException ioexception)
{
System.out.println(ioexception);
}
}

}
}

void removeConnection(Socket socket)
{
synchronized(outputStreams)
{
System.out.println("Removing connection to " + socket);
outputStreams.remove(socket);
try
{
socket.close();
}
catch(IOException ioexception)
{
System.out.println("Error closing " + socket);
ioexception.printStackTrace();
}
}
}

}


class MsgServerThread extends Thread
{

public MsgServerThread(MsgServer server1, Socket socket1)
{
server = server1;
socket = socket1;
start();
}

public void run()
{
try
{
ObjectInputStream datainputstream = new ObjectInputStream(socket.getInputStream());
do
{
String s = (String)datainputstream.readObject();
System.out.println("Sending " + s);
server.sendToAll(s);
} while(true);
}
catch(Exception ioexception)
{
ioexception.printStackTrace();
}
finally
{
server.removeConnection(socket);
}
}

private MsgServer server;
private Socket socket;
}


每次运行都出现:


java.io.StreamCorruptedException: Type code out of range, is -84

at java.io.ObjectInputStream.peekCode(ObjectInputStream.java:1556)

at java.io.ObjectInputStream.refill(ObjectInputStream.java:1684)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:283)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:236)

at screencapture.MsgServerThread.run(MsgServer.java:102)
的错误提示:
若把ObjectOput(In)putStream 该为 DataOut(In)putStream 就没有问题呀 这是为什么呢?
...全文
33 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,612

社区成员

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

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