저는 학교 프로젝트에서 작업하고 있으며 다음 코드는 프로젝트를 빌드하기 위해 제공된 예제입니다 (아무 문제없이 작동해야하지만 ...). 아무 컴파일 오류가 없었다하지만 난 그것을 다음과 같은 메시지를 테스트하기 위해 텔넷을 사용할 때 보여줍니다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=...
의 순서를 바꾸는 것이었지만 행운은 없었다. 도와주세요 ... 고마워요.
이 코드에서 무엇을하고 있습니까? 아니, 네가하고 싶은게 뭐야? – Ankit
클라이언트가 ObjectOutputStream을 사용하여 오브젝트를 쓰고 있습니까? –
직렬화를 수행해야합니다. – Hemanth