gpt4 book ai didi

java - Java套接字服务器-客户端;卡在服务器端

转载 作者:行者123 更新时间:2023-12-03 11:56:23 24 4
gpt4 key购买 nike

这是我第一次无法在代码中找到问题/错误,所以现在我要问stackoverflow xD
我目前正在学习如何编写一个简单的服务器-客户端网络,以了解Java中的套接字和服务器套接字是如何工作的。因此,我编写了一个由Server,Client和Handler类组成的“程序”。 Handler类负责接收客户端的消息并发送响应。从服务器发送到客户端工作正常,客户端收到消息。但是,当客户端向服务器发送消息时,它什么也没有收到。我正在使用的BufferedReader卡在readLine()请求上。

//This is the broken down version of what is happening in my Handler class
ServerSocket server = new ServerSocket(port); //These two lines of code actually happen in the Server class
Socket client = server.accept(); //but to simplify it I put them here
//Setting up the IO
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
//The Handler is waiting for the Reader to be ready and then prints the input
//Additionally, it sends a confirmation to the client
while(true) {
String input;
if(in.ready()){
if ((input = in.readLine()) != null) {
System.out.println(input);
out.println("Message Received");
if(input=="close") break;
}
}
}

//Expected output: "Message Received"
//Actual ouput: none, it gets stuck at in.ready() or in.readLine()
当我从客户端发送消息时,它应该只打印消息并发送确认给客户端,但是如果我删除第一个if语句,它就永远不会超过 if(in.ready()){...}部分或卡在 if((input=in.readLine())!=null){...}上。我使用IntelliJ对其进行调试,并且InputStream不包含 readLine()期望的任何消息或回车符。我发现这真的很奇怪,因为Server和Client类的发送和接收部分(大多数)是相同的。
我唯一想到的可能是此问题的原因,即客户端以某种方式在发送消息时遇到了问题。
//This is the broken down version of what is happening in my Client class
Socket client = new Socket();
client.connect(new InetSocketAddress("localhost",port));
//Setting up the IO
Scanner scanner = new Scanner(System.in); //I am using a Scanner for the message inputs
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
String input;
System.out.println("Enter the first Message: ");
while ((input = scanner.nextLine()) != null) {
String inServer;
System.out.println(input); //The input is correct
out.println(input); //I am suspecting it has something to do with this line or the PrintWriter
//This part works perfectly fine here while it does not in the Handler class
if (in.ready()) {
if ((inServer = in.readLine()) != null) {
System.out.println(inServer);
}
}
System.out.println("Enter next Message: ");
}
Expected output: inServer
Actual output: inServer
如您所见,这部分的常规设置与Handler类中的相同,但是在发送到Server时似乎出了点问题。我不知道这是服务器(我认为不是,因为用于接收消息的相同代码在Client类中也可以正常工作)还是Client,在这种情况下,那一定是PrintWriter的问题或类似的东西。
我已经在stackoverflow上查看了其他类似问题,但没有找到能解决我问题的方法。
如果有人想详细复制所有内容,则提供类的完整代码:(Pastebin链接)
Server class
Client class
Handler class

最佳答案

好吧,看来问题已经解决了...
似乎它与代码所在的IntelliJ项目有关。我不得不将其移至新项目中,现在它可以工作了。
该问题现在已解决,如果有人想将此代码用作服务器-客户端系统的基础,我将保持pastebin-links正常工作。

关于java - Java套接字服务器-客户端;卡在服务器端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64902635/

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