读取我从Java服务器发送的对象
您好,我正在尝试向服务器发送一个对象,然后在服务器接收到它之后,从服务器获取同一个对象,并在客户端输出中将其作为字符串读取。我最初发送的消息似乎正常,但之后的一切都不正常,以下是我的代码:读取我从Java服务器发送的对象,java,sockets,Java,Sockets,您好,我正在尝试向服务器发送一个对象,然后在服务器接收到它之后,从服务器获取同一个对象,并在客户端输出中将其作为字符串读取。我最初发送的消息似乎正常,但之后的一切都不正常,以下是我的代码: import java.io.*; import java.net.*; public class GUGLi { static Socket socket = null; static ObjectOutputStream out = null; static ObjectInp
import java.io.*;
import java.net.*;
public class GUGLi {
static Socket socket = null;
static ObjectOutputStream out = null;
static ObjectInputStream in = null;
String host = "host";
public static void main(String[] args) throws IOException {
try {
OpenPort();
InfoSent();
ReadInfo();
String line;
while ((line = in.toString()) != null) {
System.out.println(line);
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host: " + "host");
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for "
+ "the connection to: " + "host");
System.exit(1);
in.close();
socket.close();
out.close();
}
}
public static void OpenPort() throws UnknownHostException, IOException{
socket = new Socket ("host", 7879);
}
public static void InfoSent()throws IOException {
Student info = new Student (22, "Guglielmo", "Male",
"email", "#");
out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(info);
System.out.println("Sent: " + info);
out.flush();
}
public static void ReadInfo()throws IOException {
in = new ObjectInputStream(socket.getInputStream());
}
}
您遇到的第一个问题是您没有调用@EJP的sais读取方法,因此请查看他的答案以了解更多详细信息 编辑:我已删除了有关无法在
InputStream
中接收数据的信息。我错误地认为您的套接字
未连接到另一个客户端,因为我认为String host=“host”
将连接到环回地址,并且我没有看到任何代码将数据发送回您的输入流
我建议你读一些教程来澄清这一点。我建议你有一个坚实的基础。它将解释您需要的所有内容。
line=in.toString()
不读取行。它将InputStream
转换为其字符串表示形式。您需要调用一个read方法。如果希望读取行,则需要BufferedInputStream.readLine()
。但是,如果您在同一个套接字上读取对象,则不能混合流/读取器类型,因此您应该使用另一端的readUTF()
读取对象,并使用writeUTF()
写入对象。工作和不工作是什么意思?你能说得更清楚吗?是的,很抱歉,在我第一次打印发送后:我似乎没有收到服务器的任何响应或任何错误消息,说明它无法连接。没问题,如果你发现这个awnser有用,你可以升级它,如果是这样的话,可以标记为awnser。但是我很高兴我能帮助你。这个答案完全不正确。他可以使用同一个插座进行发送和接收。其他人都知道。@EJP我可能不了解他的情况,但如果我没有弄错的话,将输出写入并接收到同一个套接字是不符合逻辑的。你为什么要做这样的事。也许是我的解释不够清晰,但我不明白我做了什么wrong@Marc-安德烈,你错了。每个人都通过同一个套接字读写。它们是全双工信道。它使用了两种资源,其中一种在这里不符合逻辑。@EJP我知道您可以在同一个套接字上读写。但是您读取的内容必须来自另一个客户机或另一个源,而不是同一个套接字,即刚刚写入的同一个主机。我在想,当他在=newObjectInputStream(socket.getInputStream())中执行时代码>他正在等待输入,对吗?但是他通过out=newObjectOutputStream(socket.getOutputStream())发送他的日期代码>在代码中没有任何地方我看到另一个可以发送数据的客户端。所以我认为通过套接字发送并期望它在同一套接字的InputStream中写入不是逻辑