gpt4 book ai didi

java - ObjectInputStream 不适用于套接字

转载 作者:行者123 更新时间:2023-12-01 04:06:22 27 4
gpt4 key购买 nike

几天前,我开始编写一个小型多人游戏,其中我使用 ObjectInputStreams 和 ObjectOutputStreams 与服务器交换数据。但由于某种原因,服务器没有收到任何东西。所以我寻求一些帮助,但我发现的一切都是,我必须刷新 ObjectOutputStream。当然我这样做了,但这不是我的问题的解决方案。所以我写了一个小的测试应用程序,它和我的游戏一样。但仍然存在同样的问题:InputStream 没有收到任何东西。所以这是我的测试应用程序代码:

服务器应用程序:

    try {
ServerSocket srvr = new ServerSocket(12975);

Socket client = srvr.accept();

ObjectInputStream in = new ObjectInputStream(client.getInputStream());
ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());
out.flush();

System.out.println("server ready!");

String line = "";
while(!line.equalsIgnoreCase("exit")){
while(in.available() <= 0){}
line = in.readObject().toString();
System.out.println(">>> recieved: " + line);
}

client.close();
srvr.close();
System.exit(0);
} catch (IOException e) {
System.err.println("ERROR: " + e.getMessage());
e.printStackTrace();
System.exit(1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

这是客户端应用程序:

    try {
Socket client = new Socket("localhost", 12975);

ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());
out.flush();
ObjectInputStream in = new ObjectInputStream(client.getInputStream());

System.out.println("client ready!");
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

String line = "";
while(!line.equalsIgnoreCase("exit")){
System.out.print("> ");
line = input.readLine();
out.writeObject(line);
out.flush();
}

client.close();
System.exit(0);
} catch (IOException e) {
System.err.println("ERROR: " + e.getMessage());
e.printStackTrace();
System.exit(1);
}

我试着对双方都这样做:服务器->客户端和客户端->服务器,但是两个套接字都没有收到任何东西。任何研究都失败了,因为每个人似乎都在构造 OutputStream 后忘记了 flush(),但随后它起作用了。所以我希望,任何人都知道这个问题并且能够帮助我。

P.S:我既不是英国人也不是美国人,如果我的英文有误,请见谅! :D

最佳答案

试试这个,这是有效的。

while(!line.equalsIgnoreCase("exit")){
while(in.available() <= 0){
line = in.readObject().toString();
System.out.println(">>> recieved: " + line);
}
}

您在服务器代码中的第二个while 循环括号弄错了。

关于java - ObjectInputStream 不适用于套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22113962/

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