【问题标题】:How to setup server-client communication using Telnet via a NetManager class如何通过 NetManager 类使用 Telnet 设置服务器-客户端通信
【发布时间】:2015-06-15 23:51:59
【问题描述】:

我们正在开展一个学校项目,我们必须使用 Telnet(是的,我知道,我们不应该使用它等,但我们必须)在服务器和服务器之间进行通信一个客户。我们有两个类设置,一个服务器和一个客户端,这是一个线程。我们将客户端称为“NetManager”,它可以发送和接收消息。

但是,我们还有其他类需要向服务器发送消息,并处理服务器返回的输出。我们希望通过 NetManager 来实现这一点,而不是为每个类单独设置一个新的线程和套接字。

但是,我们不知道该怎么做。理想情况下,我们希望在 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();
            }
        }
    }
}

这是我根据最佳情况制定的快速方案:

【问题讨论】:

    标签: java sockets telnet


    【解决方案1】:

    虽然我认为您的设计是一个不错的设计,但我也认为您想要做的事情可能过于复杂。如果多个类将使用同一个 NetManager 实例,那么您将不得不实现某种锁定和/或排队,以便一次只有一个类尝试访问 NetManager。然后,您还必须想办法确保 NetManager 收到的任何响应都能返回给适当的调用者。

    说了这么多,我会让任何使用 NetManager 的类在构造函数中接受它的实例。然后它将保存对该对象的引用并在必要时使用它。

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 2012-12-26
      • 2011-09-05
      • 2012-03-01
      • 1970-01-01
      相关资源
      最近更新 更多