您好我正在尝试将对象发送到服务器,然后在服务器收到它之后,从服务器获取同一个对象并在客户端输出中将其作为String读取。我最初发送的消息似乎有效,而之后的所有内容都不是,这是我的代码:
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());
}
}
答案 0 :(得分:1)
line = in.toString()
不读取行。它将InputStream
转换为其字符串表示形式。您需要调用read方法。如果您希望阅读行,则需要BufferedInputStream.readLine()
。但是,如果您在同一个套接字上阅读对象,则无法混合流/阅读器类型,因此您应该使用readUTF()
阅读并在另一端使用writeUTF()
进行阅读。
答案 1 :(得分:0)
你遇到的第一个问题是@EJP并没有将阅读方法称为sais,所以请看他的答案以获得更多细节。
编辑:我删除了有关无法在InputStream
中接收数据的信息。我认为你的socket
没有连接到另一个客户端是错误的,因为我认为String host = "host"
会连接到环回地址,而我没有看到任何代码将数据发送回你的{ {1}}。
我建议您阅读一些教程以清除它。我建议你Java tutorial about socket要有一个强大的基础。它将解释您需要的一切。