gpt4 book ai didi

java - ObjectInputStream 和 getInputStream

转载 作者:行者123 更新时间:2023-12-01 14:41:28 28 4
gpt4 key购买 nike

我正在开发一个学校项目,以下代码是用于构建该项目的示例(应该可以正常工作,但不是......)。没有编译错误,但是当我使用 telnet 测试它时,显示以下消息:

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=... 的顺序,但没有成功。请帮忙...谢谢。

最佳答案

据我从评论中了解到,您正在尝试使用 ObjectInputStream 从 telnet 连接读取对象。

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

您的 telnet 客户端并不真正关心 Java ObjectOutputStream、ObjectInputStream 和序列化。

所以我会尝试像包装在 BufferedReader 中的 InputStreamReader 之类的东西。

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

关于java - ObjectInputStream 和 getInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15917045/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com