2014-02-23 72 views
1

我啓動服務器程序客戶端套接字,並等待客戶端只需30 seconds.It工作正常,在第一次迭代,並在剩餘iterations.Any建議不等待。製作服務器套接字等待在每次迭代

這裏

minLinkWt() sets the index. 

然而仍然在程序相同。

import java.sql.*; 
import java.net.*; 
import java.lang.*; 
class Democ{ 
int index,port,min=100; 
ServerSocket ss=null; 
Socket s=null; 

void begin(){ 
int av=0;boolean b=false; 
    minLinkWt(); 
    while(!b){ 
    av=checkStatus(index); 
    if(av==1){b=true;} 
      } 
     if(av==1) 
     Connect(); 
     else 
     System.out.println("No Routers Available"); 
} 
void Connect() 
    { 
    System.out.println("Enter the Message to send to clients::"); 
    try{ 
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    String msg=br.readLine(); 
    PrintStream ps=new PrintStream(s.getOutputStream()); 
    ps.println(msg); 
    }catch(Exception e){e.printStackTrace();} 
    } 
void callSwitch(int index_formal) 
{ 
switch(index_formal) 
{ 
case 1: 
port=2000; 
break; 
case 2: 
port=2001; 
break; 
case 3: 
port=2002; 
break; 
case 4: 
port=2003; 
break; 
default: 
System.out.println("No Routers in Available"); 
} 
} 

int checkStatus(int index_formal){ 
      try 
      { 
      ss=new ServerSocket(port); 
      ss.setSoTimeout(30000);  
      s=ss.accept();    
      }catch(InterruptedIOException e){ 
      System.out.println("Cannot connect through Router1 Waiting for Router2");} 
      catch(Exception g){g.printStackTrace();}  
      if(s==null) 
      return 0; 
      else 
      return 1; 
    } 
class DemoCopy{ 
public static void main(String s[]) 
{ 
Democ obj=new Democ(); 
obj.begin(); 
} 
} 

所以在每次迭代中,服務器必須等待客戶端,但不等待。 我得到的輸出

hello 
hello 
hello 
hello 
min is6 
AT index2 
Cannot connect through Router1 Waiting for Router2 
No Routers Available 

回答

0

它看起來就像是「指數」的開始()可以是一個數組的索引,所以要檢查服務器套接字端口形式0的狀態,以x或某事。

也許你應該張貼更多的源代碼,但它看起來像你在的checkStatus(),這意味着ServerSocket的將每一次綁定相同的端口使用單端口值。

這是在第一次迭代確定,因爲服務器套接字未在任何端口進行綁定,但在隨後結束第一次迭代的,你沒有關閉服務器套接字的。

所以服務器插座仍難免在給定的端口,並創建具有相同的端口號的新的ServerSocket會失敗,因爲它已綁定,除非你先關閉它,你不能再綁定。

你應該使用單一的ServerSocket,並一度的ServerSocket.accept()的返回插座,那麼你就可以將其存儲到陣列,並檢查它的狀態頻繁。或者,也許你可以每次區分端口號,並讓客戶端每次連接不同的端口也可以工作,但我不認爲這就是你想要做的。

+0

我已經設定服務器來監聽不同的端口號在同一program.When它第一次聽上說的端口號2000,然後再次,如果在我的代碼我試圖更改端口號,然後我得到連接重置exception.So我想到了上面這段代碼。 – Intriguing

+0

你能建議我什麼時候我應該打開和關閉連接套接字以獲得在這種情況下等待的時間。 – Intriguing

+0

等待......如果您編程服務器每次聽取不同的端口,您如何讓客戶知道哪些端口可用?根據你的問題「讓服務器套接字在每次迭代中等待客戶端套接字」,你應該只打開一個特定端口號爲ONLY ONCE的服務器套接字,並在while循環中調用serverSocket.accept(),這樣服務器就會建立連接並返回連接到客戶端的套接字對象。 – wonhee