当前位置: 首页 > 知识库问答 >
问题:

Java tcp服务器编程不起作用

商宝
2023-03-14

我使用这段代码通过JAVA运行简单的TCP服务器,并使用Socket协议android应用程序作为客户端。问题是,当客户端连接时,我会发送消息,服务器端什么都不做,直到我断开客户端的连接,之后会出现消息。我认为在while((inputLine=in.readLine())!=空)

import java.net.*;
import java.io.*;

public class TCPIP {

public static void main(String[] args) throws IOException {
    ServerSocket serverSocket = null;
    try{
        serverSocket = new ServerSocket(10007);
    }
    catch(IOException e)
    {
        System.err.println("Could not listen on port 10007");
        //System.exit(1);
    }
    Socket clientSocket = null;
    System.out.println("Waiting for connection....");

    try{
        clientSocket = serverSocket.accept();
    }
    catch(IOException e){
        System.err.println("Accept Failed");
        //System.exit(1);
    }
    System.out.println("Connection Successful");
    System.out.println("Waiting for input");

    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true); 
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));


    String inputLine;


    while((inputLine = in.readLine()) != null) 
    {
        System.out.println("Server: "+ inputLine);
        out.println(inputLine);

        if(inputLine.equals("Bye."))
        {
            break;
        }
    }
    out.close(); 
    in.close(); 
    clientSocket.close(); 
    serverSocket.close(); 
}

}

共有1个答案

轩辕鸿祯
2023-03-14
while((inputLine = in.readLine()) != null)

是错误的代码,您应该使用

inputLine = in.readLine();
while(inputLine != null)
{
   inputLine = in.readLine();
}

相反readLine()等待换行符-确保服务器发送换行符,否则客户端将阻塞,直到连接关闭:https://docs.oracle.com/javase/6/docs/api/java/io/BufferedReader.html#readLine()

阅读一行文字。行被认为是由换行符(“\n”)、回车符(“\r”)或紧跟换行符的回车符中的任何一个终止的。

 类似资料:
  • 我正试图用服务栈实现Swagger。我已经用nuget安装了带有swagger的服务栈。当前的DLL版本大多报告为3.9.56.0。 我正在努力遵循…https://github.com/ServiceStack/ServiceStack.UseCases/tree/master/SwaggerHelloWorld提供的例子 这个指令看起来相当简单... 在我通过nuget安装后(按照文档说明),

  • 问题内容: 我有这个Docker Compose配置,我只需创建一个NodeJS容器并在其中安装Angular CLI。 之后,我可以使用SSH在容器内进行SSH 。可以正常工作,但似乎不起作用。它已正确启动,控制台中没有错误。但是,如果我访问(我将端口4200映射到80),则不会加载任何内容。 我想念什么吗? 问题答案: 在您的Dockerfile中,您缺少Expose行,例如: 尝试将其放在d

  • 在我的文件中,我有... 我知道文件正在正确加载,因为服务器在端口8086上运行。 在应用程序中,我有一个 当我调用endpoint时,请求永远不会超时,它只是无限期地挂起。 我错过了什么吗? 注意:我还被告知,Tomcat使用这个字段是以分钟为单位,而不是以毫秒为单位(这在我看来是相当不寻常的选择)。我试着将它设置为< code > server . connection-time out =

  • 我是Apache Kafka的新手,我试图从windows机器上运行.\bin\windows\kafka-server-start.bat.\config\server.properties命令来启动Kafka服务器,但我没有得到命令提示符屏幕的任何响应,既没有任何错误消息,也没有任何成功消息,它只是把我扔到了一个新的命令行。虽然我能够成功运行Zookeeper服务器。我已经正确地更新了serv

  • 问题内容: 从我的本地计算机到开发服务器,Web Deploy 3.0可以使用以下命令与Visual Studio 2012发布配置文件配合使用: msbuild。\ myproj.csproj / verbosity:d /p:DeployOnBuild=true;PublishProfile=Develop;VisualStudioVersion=11.0;AllowUntrustedCert

  • 问题内容: 我使用FileWriter和BufferWriter写入文件。文件“ test.txt”已创建,但内部未写入任何内容。 该文件应写入我的按钮的ActionEvent中。那是为什么吗? 那是我的代码: 问题答案: 这里, 您将其包装在,默认缓冲区大小为8KB。因此,只要您不写超过8KB的内容并且不刷新/关闭它,它就不会出现在目标文件中。 完成后,您需要关闭编写器。这将刷新所有缓冲区并释放