Gleichzeitiges Abhören von zwei Ports im Java-Server mithilfe von Multithreading

Ich baue einen einfachen Java-Server auf, der gleichzeitig auf zwei Ports mit zwei ServerSocket-Instanzen auf Client-Anfragen wartet. Hier ist der Code für Server:

import java.io.PrintWriter;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

class Socket1 implements Runnable
{
    public void run()
    {
        try
        {
            ServerSocket serverSock=new ServerSocket(5000);
            while(true)
            {
                Socket sock=serverSock.accept();
                PrintWriter writer=new PrintWriter(sock.getOutputStream());
                String text="Welcome to Port 5000";
                writer.println(text);
            }
        }
        catch(Exception e)
        {
            System.out.println("Error");
        }
    }
}

class Socket2 implements Runnable
{
    public void run()
    {
        try
        {
            ServerSocket serverSock=new ServerSocket(3000);
            while(true)
            {
                Socket sock=serverSock.accept();
                PrintWriter writer=new PrintWriter(sock.getOutputStream());
                String text="Welcome to Port 3000";
                writer.println(text);
            }
        }
        catch(Exception e)
        {
            System.out.println("Error");
        }
    }
}

public class Server
{
    public static void main(String[] args)
    {
        Socket1 s1=new Socket1();
        Socket2 s2=new Socket2();
        Thread t1=new Thread(s1);
        Thread t2=new Thread(s2);
        t1.start();
        t2.start();
    }
} 

Code für Client1:

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.net.Socket;

public class Client1
{
    public static void main(String[] args)
    {
        try
        {
            Socket s=new Socket("127.0.0.1", 5000);
            InputStreamReader streamReader=new InputStreamReader(s.getInputStream());
            BufferedReader reader=new BufferedReader(streamReader);
            String text=reader.readLine();
            System.out.println(text);
            reader.close();
        }
        catch(Exception e)
        {
            System.out.println("Error");
        }
    }
}

Client2 enthält den gleichen Code wie Client1. Der einzige Unterschied besteht darin, dass versucht wird, eine Verbindung zu Port 3000 herzustellen. Jetzt führe ich Server.java zuerst über die Eingabeaufforderung aus. Während der Server blockiert, öffne ich zwei separate Eingabeaufforderungen und führe Client1.java an einer Eingabeaufforderung und Client2.java an der anderen Eingabeaufforderung aus. Aber beide Clients werden blockiert und ich erhalte keine Ausgabe. Irgendeine Idee, wie man das löst?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage