0

저는 학교 프로젝트에서 작업하고 있으며 다음 코드는 프로젝트를 빌드하기 위해 제공된 예제입니다 (아무 문제없이 작동해야하지만 ...). 아무 컴파일 오류가 없었다하지만 난 그것을 다음과 같은 메시지를 테스트하기 위해 텔넷을 사용할 때 보여줍니다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

+0

클라이언트가 ObjectOutputStream을 사용하여 오브젝트를 쓰고 있습니까? –

+0

직렬화를 수행해야합니다. – Hemanth

답변

1

의견에서 알 수 있듯이 ObjectInputStream을 사용하여 텔넷 연결에서 개체를 읽으려고합니다.

당신은 그렇게 할 수 없습니다. ObjectInputStream을 사용하려면 ObjectOutputStream을 사용하여 작성하는 다른 연결 프로그램이 필요합니다.

당신은 텔넷 클라이언트가 Java ObjectOutputStream, ObjectInputStream 및 Serialization에 관해서 정말로 똥을주지 않는다.

그래서 나는 BufferedReader에 래핑 된 InputStreamReader와 같은 것을 시도 할 것입니다.

단지 연결을 테스트하려는 경우 텔넷을 사용하는 대신 프로그램에 연결할 작은 Java 프로그램을 작성하십시오.

0

David 주석에서 언급했듯이 ObjectOutputStream을 사용하여 동일한 DataObject를 서버 소켓에 보내는 클라이언트를 작성해야합니다.

DataObject가 필요하기 때문에 클라이언트가 DataObject를 보내야합니다. 텔넷을 사용하면 연결되지만 거기에서부터 자바 객체 스트림이 이해하는 방식으로 DataObject를 보낼 수 없습니다.

서버/클라이언트 예를 보려면 http://zerioh.tripod.com/ressources/sockets.html을 참조하십시오.

또한 일부 학교 운동 이후 개념을 이해하려고 시도하고 복사하지 마십시오.