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

时间:2015-04-10 09:54:03

标签: java sockets telnet

我们正在开展一个学校项目,我们必须使用Telnet(是的,我知道,我们不应该使用它等,但我们 )进行沟通服务器和客户端之间。我们有两个类设置,一个服务器和一个客户端,这是一个线程。我们打电话给我们的客户' 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 个答案:

答案 0 :(得分:1)

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

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