스레드가있는 다중 포트 서버를 빌드하려고합니다. 또한 ClientManager 클래스와 Client 클래스가 있습니다. 사용자가 포트 범위 ... 8000-8010을 입력하면됩니다. 서버는 연결을 위해 모든 포트에서 수신 대기해야합니다. 그러면 ClientManager는 포트 범위를 가져오고 각각에 대해 Client 인스턴스를 만듭니다. 그런 다음 클라이언트는 0-1 초 사이의 임의의 간격으로 서버에 메시지를 전송합니다. 클라이언트가 100 개의 메시지를 보낸 후에 연결이 끊어집니다. 서버는 5 초마다 수신 한 메시지 수를 출력해야합니다.다중 포트 서버 빌드 : Java
지금까지 나는 포트 범위에 대한 사용자 입력을 가져 와서 Runtime.exec() 매개 변수를 통해 ClientManager로 전송했습니다. 여기에 내 현재 코드는 서버와 ClientManager위한거야 :
import java.io.*;
public class Server{
public static void main(String[] args){
try{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader userInputReader = new BufferedReader(isr);
String lowPortRange = null;
String highPortRange = null;
System.out.println("Enter low end of port range:");
if((lowPortRange = userInputReader.readLine())!=null){
System.out.println("Low Range: " + lowPortRange);
}
System.out.println("Enter high end of port range:");
if((highPortRange = userInputReader.readLine()) != null){
System.out.println("High Range: " + highPortRange);
}
int lowPort = Integer.parseInt(lowPortRange);
int highPort = Integer.parseInt(highPortRange);
int totalPorts = highPort - lowPort+1;
System.out.println("Total ports: " + totalPorts);
System.out.println("...Port numbers...");
for(int port = lowPort; port<=highPort; port++){
System.out.println(port);
}
System.out.println("Done!");
System.out.println();
Process p = Runtime.getRuntime().exec("java ClientManager " + lowPort + " " + highPort);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
}catch(IOException e){
System.out.println("IOException!");
e.printStackTrace();
}
}
}
import java.io.*;
public class ClientManager{
private int lowPort;
private int numPorts;
public static void main(String[] args){
System.out.println("ClientManager Started.");
int firstPort = Integer.parseInt(args[0]);
int lastPort = Integer.parseInt(args[1]);
System.out.println("First Port: " + firstPort);
System.out.println("Last Port: " + lastPort);
}
}
내 질문은 기본적으로 이것이다 : 누군가가 설명 할 수 이론적으로, 여기에서 어디로 가야?
실제로 서버를 정상적으로 종료해야합니다. –
그런 다음 모든 스레드가 영원히 반복하지 않고 일종의 종료 조건을 갖도록해야합니다. 서버 소켓 스레드가 더 이상 없을 때의 주 스레드, 클라이언트 연결 처리가 끝날 때의 서버 스레드입니다. – millimoose