2012-02-18 226 views
0

我想創造在同一文件中的Java服務器和客戶端...因爲這是我的項目的結構Java服務器套接字

服務器 - >客戶端/服務器---->客戶端

SERVER和CLIENT部分的編碼非常簡單,但是當爲CLIENT/SERVER部分創建時我遇到問題..我的代碼只能運行CLIENT部分而不啓動SERVER部分。因爲我的線程運行()代碼。

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()和代碼只是停在那裏不前進到在try部分下執行新的服務器

+1

http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html – 2012-02-18 04:56:04

+0

什麼是client.run(); ?爲什麼不是這個東西的線程呢? – 2012-02-18 04:58:49

回答

1

不知道什麼Client是,或看其代碼限制了我們的幫助能力。如果它有一個run()方法它可能實現Runnable,所以你可以直接調用new Thread(client).start()而不是直接調用它的run方法。

+0

傻我,似乎解決了它...謝謝 – user1217609 2012-02-18 05:11:42

2

如果Client小類Thread,那麼你需要撥打start(),而不是run()。如果它實現Runnable,那麼你需要實例化一個Thread來執行它並調用線程的start()方法。

+0

傻我,似乎解決了它...謝謝 – user1217609 2012-02-18 05:10:46