2012-11-22 23 views
0

我做了一個服務器和一個客戶端通信使用的IP地址,但我堅持一個服務器的多個通信如何連接一臺服務器multple客戶

s=new ServerSocket(77); 
ss=s.accept(); 
icon.displayMessage("New message for you", "Please click here", TrayIcon.MessageType.WARNING);  
os=ss.getOutputStream(); 
ps=new PrintStream(os); 
is=ss.getInputStream(); 
br=new BufferedReader(new InputStreamReader(is)); 
ps.println(st); 
} 
catch(Exception e) 
{} 

在客戶端

try 
{ 
ss=new Socket(ip,77); 

} 
catch(Exception e){ 
} 
is=ss.getInputStream(); 
br=new BufferedReader(new InputStreamReader(is)); 
os=ss.getOutputStream(); 
ps=new PrintStream(os); 
ps.println(msg+" : "+st1); 
+1

第一條規則:沒有空的catch塊!接下來,您是否嘗試過使用線程來允許服務器與多個客戶端進行交互? –

+2

第2條規則:關閉finally塊中的所有Object – mKorbel

回答

2

你可以這樣做:

while (true){ 
    s=new ServerSocket(77); 
    ss=s.accept(); 
    Thread at = new Thread(ss); 
    at.start(); 
} 

然後與客戶端的通信發生在'at'的運行方法。

2

你應該在一個單獨的線程中運行每個環節中,像這樣:

static class Session extends Thread { 
    Socket s; 
    Session(Socket s) { 
     this.s = s; 
    } 
    @Override 
    public void run() { 
     try { 
      OutputStream os = s.getOutputStream(); 
      // your code 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

public static void main(String[] args) throws Exception { 
    ServerSocket s = new ServerSocket(77); 
    for (;;) { 
     Socket ss = s.accept(); 
     new Session(ss).start(); 
    } 
} 

此代碼只是爲了解釋這個想法。