为什么ObjectOutput出错呀
我实验一个 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 就没有问题呀 这是为什么呢?