首页 文章

如何通过NetManager类使用Telnet设置服务器 - 客户端通信

提问于
浏览
1

我们使用它等,但我们必须)在服务器和客户端之间进行通信 . 我们有两个类设置,一个服务器和一个客户端,这是一个线程 . 我们调用了我们的客户端'NetManager',它可以发送和接收消息 .

但是,我们还有其他类需要向服务器发送消息,并处理服务器返回的输出 . 我们希望通过NetManager执行此操作,而不是单独为每个类设置新的Thread和套接字 .

但是,我们不知道该怎么做 . 理想情况下,我们希望在NetManager类中有 while(working) { } ,它读取服务器发送的行,但我们还需要在while循环内发送消息 . 消息需要改变,所以简单地将它们放在while循环中是行不通的 . 有没有办法进行服务器 - 客户端通信,其中多个类使用NetManager类来发送和接收来自服务器的消息?

我在下面包含了一个我们的NetManager类的精简版本以供参考 . 此版本仅读取服务器发送的行,它尚未发送消息(可以使用 out.println(); 完成 .

public class NetManager extends Thread {
    private BufferedReader in;
    private BufferedReader stdIn;
    private PrintWriter out;
    private String line;

    @Override
    public void run() {
    boolean working = true;

        try {
            Socket sock = new Socket("localhost", 7789);
            out = new PrintWriter(sock.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
        } catch (IOException e) {
            e.printStackTrace();
        }

        while (working) {
            try {
                line = in.readLine();
                System.out.println(line);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

这是我用最好的案例场景制作的快速方案:

enter image description here

1 回答

  • 1

    虽然我认为你的设计是一个很好的设计,但我也认为你想要做的事情可能过于复杂 . 如果多个类将使用相同的NetManager实例,那么您将不得不实现某种锁定和/或排队,因此一次只有一个类尝试访问NetManager . 然后,您还必须找出一些方法来确保NetManager收到的任何响应都返回到相应的调用者 .

    说完这一切之后,我会让任何使用NetManager的类在构造函数中接受它的实例 . 然后它将保存对象的引用并在必要时使用它 .

相关问题