Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过NetManager类使用Telnet设置服务器客户端通信_Java_Sockets_Telnet - Fatal编程技术网

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

Java 如何通过NetManager类使用Telnet设置服务器客户端通信,java,sockets,telnet,Java,Sockets,Telnet,我们正在进行一个学校项目,我们必须使用Telnet(是的,我知道,我们不应该使用它等等,但我们必须)在服务器和客户端之间进行通信。我们有两个类设置,一个服务器和一个客户端,这是一个线程。我们称我们的客户端为“NetManager”,它可以发送和接收消息 但是,我们还有其他类需要向服务器发送消息,并处理服务器返回的输出。我们希望通过NetManager实现这一点,而不是为每个类单独设置一个新的线程和套接字 然而,我们不知道如何做到这一点。理想情况下,我们希望在NetManager类中有一个whil

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

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

然而,我们不知道如何做到这一点。理想情况下,我们希望在NetManager类中有一个
while(working){}
,它读取服务器发送的行,但是我们还需要在while循环中发送消息。消息需要变化,因此简单地将它们放入while循环将不起作用。在多个类使用NetManager类从服务器发送和接收消息的情况下,是否有一种进行服务器-客户端通信的方法

我在下面提供了一个精简版的NetManager类以供参考。这个版本只读取服务器发送的行,还没有发送消息(这可以通过
out.println();

下面是一个由最佳案例场景组成的快速方案:


虽然我认为您的设计很好,但我也认为对于您正在尝试的操作来说,它可能过于复杂。如果多个类将使用同一个NetManager实例,那么您将不得不实施某种锁定和/或排队,以便一次只有一个类尝试访问NetManager。然后您还将我必须想办法确保NetManager收到的任何响应都返回到相应的调用方

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

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();
            }
        }
    }
}