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

Java服务器和客户端在一个程序中

阮选
2023-03-14

我想同步2个集合。如果服务器端有什么变化,连接的客户端就会更新。我有一个非常基本的问题。我现在需要复制我的java项目,并在一个项目中编程服务器,在另一个项目中编程客户端吗?但这听起来像是相当多不必要的工作。我不能在一个项目中实现这一切,然后在一个主项目中启动服务器和客户端吗?我需要线程吗?我有点纠结于最好的方法是什么。提前谢谢。

共有1个答案

黄跃
2023-03-14

因为codereview不允许我的代码,因为它还不起作用,我现在把它发布在这里,希望你能帮助我。

public class Server implements Runnable{
private String hostName = "127.0.0.1";
private int portNumber;
private ServerSocket serverSocket;
private Socket clientSocket;

public Server(int port){
    this.portNumber = port;
}

public void run(){
    String line = "";
    PrintWriter out = null;
    BufferedReader in = null;
    BufferedReader stdIn = null;

    try{
        this.serverSocket = new ServerSocket(this.portNumber); 
    }catch (IOException e) {
        System.out.println("Could not listen on port");
    }

    try{
        clientSocket = serverSocket.accept();
    } catch (IOException e) {
        System.out.println("Accept failed");
    }

    try{
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        out = new PrintWriter(clientSocket.getOutputStream(), true);
    }catch (IOException e) {
        System.out.println("Read failed");
    }

    while(true){

        try{
            line = in.readLine();

        }catch (IOException e) {
            System.out.println("Read failed");
        }

        System.out.println("line: "+line);
    }


}

protected void finalize(){
//Objects created in run method are finalized when
//program terminates and thread exits
    try{
        serverSocket.close();
    }catch (IOException e) {
        System.out.println("Could not close socket");
    }
 }

}

public class Client implements Runnable{
private String hostName = "127.0.0.1";
private int portNumber = 6602;
private Socket clientSocket = null;

public Client(Socket client){
    this.clientSocket = client;
}

public Client(int portNumber, String hostName){
    this.portNumber = portNumber;
    this.hostName = hostName;
}

public void run(){
    String line;
    PrintWriter out = null;
    BufferedReader in = null;
    BufferedReader stdIn = null;

    try{
        if(clientSocket == null)
            this.clientSocket = new Socket(this.hostName, this.portNumber);
        out = new PrintWriter(clientSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        stdIn = new BufferedReader(new InputStreamReader(System.in));
        out.println("Test string from client");
    }catch (IOException e){
        System.out.println("in or out failed");
    }   

}

}

public class DebugServerClient {

public static void testServerClient(){
    int port = 6602;
    Server srv = new Server(port);
    Client clt = new Client(port, "127.0.0.1");

    Thread s = new Thread(srv);
    s.start();

    Thread c = new Thread(clt);
    c.start();


}

}

我现在把它改成了这个,看起来很管用。这是个好办法吗?

 类似资料:
  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 问题内容: 我尝试使用以下代码从服务器到客户端发送文件和目录列表。服务器正在从客户端接收消息,但我不知道服务器是否没有发送回结果或客户端是否不接受结果。 服务器端: 问题答案: 据我所见,您在客户端上做的同时在服务器上做。从服务器发送的字符串中没有行尾字符,因此客户端将永远无法完成。执行outqw.println()或添加到要发送的内容的末尾。话虽这么说,很难用一堆注释掉的东西来浏览未格式化的代码

  • 我正在使用spring boot 2.5.1和Java 11。 我试图在同一个应用程序中创建SpringBoot管理服务器和客户端,但是当我启动它时,控制台中出现以下错误。 裁判:https://github.com/codecentric/spring-boot-admin 错误 未能将应用程序注册为Spring-boot-admin([http://localhost:8085/instanc

  • 我的问题是如何设置WebSocket++服务器,并在相同的程序或函数中创建连接到此服务器的WebSocket++客户端?(用于测试) 详细信息:我想在我的C++程序中使用库WebSocket++在WebSocket上流数据。我有一个websocket客户端,它将数据发送到外部websocket服务器。 作为一个好的程序员,我试着写一些测试来检查一切都很好。因此,我想设置一个WebSocket++服

  • 我试图使一个服务器客户端程序,允许发送多个消息从服务器到客户端或反之亦然,而不等待响应。当第一个客户端连接和断开连接时,程序工作正常。但是当我再次连接客户端时,我得到了错误。下面是我的服务器代码: 客户端代码: 下面是异常的stacktrace: java.io.ioException:在java.base/java.io.BufferedInputStream.getBufifOpen(Buff