2012-02-18 6 views
0

내가이 프로젝트의 내 구조이기 때문에 ... 동일 파일에 자바 서버와 클라이언트를 만들고 싶었자바는 서버 소켓

서버에 ---> 클라이언트/서버 ----> 클라이언트

SERVER 및 CLIENT 부분에 대한 코딩은 매우 간단하지만 CLIENT/SERVER 부분을 만들 때 문제가 있습니다. 여기서 코드는 CLIENT 부분 만 실행할 수 있고 SERVER 부분은 시작할 수 없습니다. 내 스레드 run() 코드 때문에. 코드에서

package com.main.datadistributor; 

    import java.io.IOException; 
    import java.net.ServerSocket; 

    public class Slave { 
     public static void main(String args[]) throws IOException{ 
     Config cfg = new Config("Slave"); 
     String MasterServerIP = cfg.getProperty("MasterServerIP"); 
     String MasterServerPort = cfg.getProperty("MasterServerPort"); 
     String SlaveServerPort = cfg.getProperty("SlaveServerPort"); 

     Client client = new Client(MasterServerIP,Integer.parseInt(MasterServerPort),"SLAVEONE"); 
     client.run(); 

     int numClient = 0; 
     ServerSocket listener = new ServerSocket(Integer.parseInt(SlaveServerPort)); 
     System.out.println("Server starts running"); 

     try{ 
      while(true){ 
       new Server(listener.accept(), numClient++, Integer.parseInt(SlaveServerPort), "SLAVESERVER").start(); 
      } 
     } finally { 
      listener.close(); 
     } 


    } 
} 

내가 문제는 (client.run을 실행)와 코드가 바로 시도 섹션에서 아래 새로운 서버를 실행하기 위해 진행하지 않고 멈추지이 위

+1

http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html –

+0

client.run()은 무엇입니까? ? 왜 이걸위한 스레드도 없습니까? –

답변

1

Client이 무엇인지 알고, 또는보고하지 않음 코드가 우리의 능력을 제한합니다. run() 메서드가있는 경우 Runnable을 구현할 수 있으므로 run 메서드를 직접 호출하는 대신 new Thread(client).start() 메서드를 호출하면됩니다.

+0

어리석은 나를 해결하는 것 같다 ... – user1217609

2

Client 서브 클래스 Thread 인 경우 run()이 아니라 start()으로 전화해야합니다. Runnable을 구현하는 경우 실행하려면 Thread을 인스턴스화하고 스레드의 start() 메서드를 호출해야합니다.

+0

어리석은 나를 해결할 것 같다 ... 고마워. – user1217609