2017-05-14 1 views
0

2 개의 컬렉션을 서로 동기화하려고합니다. 서버 측에서 무언가가 변경되면 연결된 클라이언트가 업데이트됩니다. 나는 아주 기본적인 질문이있다. 이제 내 Java 프로젝트를 복사하고 하나의 서버와 다른 클라이언트의 클라이언트를 프로그래밍해야합니까? 그러나 그것은 불필요한 많은 작업처럼 들립니다. 하나의 프로젝트에서 모든 것을 구현 한 다음 하나의 메인에서 서버와 클라이언트를 시작할 수 있습니까? 스레드가 필요합니까? 나는 최선의 방법이 여기에 무엇인지 붙어 있습니다. 미리 감사드립니다. 하나의 프로그램에 Java 서버와 클라이언트

+1

더 효율적이고 효과적으로 구현하려면 '스레딩'을 사용해야합니다. 이제 실제 구현을 위해 [소켓] (https://docs.oracle.com/javase/tutorial/networking/sockets/definition.html) 또는 [Remote Method Invocation] (https : // docs) 개념을 사용할 수 있습니다. .oracle.com/javase/tutorial/rmi /). –

+0

감사합니다. 나는이 예제처럼 그것을 시도했지만 이제는 클라이언트를 시작하는 방법에 문제가 있습니까? http://www.oracle.com/technetwork/java/socket-140484.html – vogs

+0

[this] (https://www.javatpoint.com/socket-programming)을 참조하십시오. –

답변

0

codereview에서 코드가 작동하지 않기 때문에 여기에 희망에 게시하여 도움을받을 수 있습니다.

public class Server implements Runnable{ 
private String hostName = "127.0.0.1"; 
private int portNumber; 
private ServerSocket serverSocket; 
private Socket clientSocket; 

public Server(int port){ 
    this.portNumber = port; 
} 

public void run(){ 
    String line = ""; 
    PrintWriter out = null; 
    BufferedReader in = null; 
    BufferedReader stdIn = null; 

    try{ 
     this.serverSocket = new ServerSocket(this.portNumber); 
    }catch (IOException e) { 
     System.out.println("Could not listen on port"); 
    } 

    try{ 
     clientSocket = serverSocket.accept(); 
    } catch (IOException e) { 
     System.out.println("Accept failed"); 
    } 

    try{ 
     in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
     out = new PrintWriter(clientSocket.getOutputStream(), true); 
    }catch (IOException e) { 
     System.out.println("Read failed"); 
    } 

    while(true){ 

     try{ 
      line = in.readLine(); 

     }catch (IOException e) { 
      System.out.println("Read failed"); 
     } 

     System.out.println("line: "+line); 
    } 


} 

protected void finalize(){ 
//Objects created in run method are finalized when 
//program terminates and thread exits 
    try{ 
     serverSocket.close(); 
    }catch (IOException e) { 
     System.out.println("Could not close socket"); 
    } 
} 

}

public class Client implements Runnable{ 
private String hostName = "127.0.0.1"; 
private int portNumber = 6602; 
private Socket clientSocket = null; 

public Client(Socket client){ 
    this.clientSocket = client; 
} 

public Client(int portNumber, String hostName){ 
    this.portNumber = portNumber; 
    this.hostName = hostName; 
} 

public void run(){ 
    String line; 
    PrintWriter out = null; 
    BufferedReader in = null; 
    BufferedReader stdIn = null; 

    try{ 
     if(clientSocket == null) 
      this.clientSocket = new Socket(this.hostName, this.portNumber); 
     out = new PrintWriter(clientSocket.getOutputStream(), true); 
     in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
     stdIn = new BufferedReader(new InputStreamReader(System.in)); 
     out.println("Test string from client"); 
    }catch (IOException e){ 
     System.out.println("in or out failed"); 
    } 

} 

은}

public class DebugServerClient { 

public static void testServerClient(){ 
    int port = 6602; 
    Server srv = new Server(port); 
    Client clt = new Client(port, "127.0.0.1"); 

    Thread s = new Thread(srv); 
    s.start(); 

    Thread c = new Thread(clt); 
    c.start(); 


} 

}

나는이 지금 그것을 변경하고 그것을 작동하는 것 같다. 이것은 좋은 방법입니까?

관련 문제