0

我正在开展一个学校项目,下面的代码是为构建项目提供的示例(应该没有任何问题但不能......)。有没有编译错误,但是当我使用telnet来测试它下面的消息显示:ObjectInputStream和getInputStream

java.io.StreamCorruptedException: invalid stream header: 56543130 
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801) 
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:298) 
    at ThreadedDataObjectHandler.run(ThreadedDataObjectServer.java:41) 

41号线是

ObjectInputStream in =new ObjectInputStream(incoming.getInputStream()); 

这里是我的代码:

import java.io.*; 
import java.net.*; 
import java.util.*; 
public class ThreadedDataObjectServer { 
    public static void main(String[] args) { 

     try 
    { ServerSocket s = new ServerSocket(3000); 

    for (;;) 
    { Socket incoming = s.accept(); 
     new ThreadedDataObjectHandler(incoming).start(); 

    } 
    } 
    catch (Exception e) 
    { e.printStackTrace(); 
     } 
    } 
} 

class ThreadedDataObjectHandler extends Thread 
{ 
DataObject myObject = null; 
private Socket incoming; 
private String greeting="Hello!"; 
public ThreadedDataObjectHandler(Socket incoming) 
    { 
     this.incoming = incoming; 
    } 

    public void run() 
    { try 
     {  

    ObjectInputStream in =new ObjectInputStream(incoming.getInputStream()); 

    ObjectOutputStream out =new ObjectOutputStream(incoming.getOutputStream()); 

    myObject = (DataObject)in.readObject(); 

    System.out.println("Message read: " + myObject.getMessage()); 

    myObject.setMessage("Got it!"); 

    System.out.println("Message written: " + myObject.getMessage()); 


    out.writeObject(myObject); 

    in.close(); 

    out.close(); 

    incoming.close();  

    } 
    catch (Exception e) 
    { e.printStackTrace(); 
    } 
    } 
} 
class DataObject implements Serializable{ 
    protected String message; 
    public DataObject(){ 
     message=""; 
    } 
public void setMessage(String m){ 
    message=m; 
} 
    public String getMessage(){ 
    return message; 
    } 
} 

我想什么是要切换语句ObjectInputStream in=...ObjectOutputStream out=...的顺序,但没有运气。请帮助...谢谢。

+0

你在这段代码中做了什么?不,你想做什么? – Ankit 2013-04-10 04:39:52

+0

您确定客户端正在使用ObjectOutputStream编写对象吗? – 2013-04-10 04:43:27

+0

您需要执行序列化。 – Hemanth 2013-04-10 04:51:24

回答

1

从我所理解的评论中,您尝试使用ObjectInputStream从telnet连接中读取对象。

你不能那样做。如果您要使用ObjectInputStream,则需要使用ObjectOutputStream编写其他连接程序。

你的telnet客户端并没有真正给出Java ObjectOutputStream,ObjectInputStream和Serialization的狗屎。

所以我想尝试一个像BufferedReader中包装的InputStreamReader。

如果您只是想测试连通性,只需编写一个小型java程序,它将连接到您的程序而不是使用telnet。

0

大卫正如我在评论中提到的,您必须编写一个客户端,它使用ObjectOutputStream将相同的DataObject发送到服务器套接字。

由于您期望DataObject客户端需要发送DataObject。当你使用telnet时,它会连接,但是从那里你不能以Java Object Object能理解的方式发送DataObject。

有关服务器/客户端示例,请参阅http://zerioh.tripod.com/ressources/sockets.html

另外,因为它的一些学校运动试图理解的概念,不要只是复制。