2015-05-02 26 views
0

我已經創建了一個服務器,它使用線程來允許多個節點進行連接,當它們連接時,服務器接收節點信息並將其存儲到鏈接列表中。我遇到的問題是,當試圖將NodeManager類中的nodelist.addNode行鏈接到創建新節點的CreateNode類時,它顯示無法找到符號。任何幫助,這是非常感謝。找不到變量地址和端口的符號

下面是在客戶端run()方法:

@Override 
public void run() { 

clientList client = new clientList(); 
while(true){ 
try { 
    //byte[] buffer = new byte [256]; 
    in = new BufferedReader(new   InputStreamReader(s.getInputStream())); 
    out = new PrintWriter(this.s.getOutputStream(),); 
    String string = in.toString(); 

    address = socket.getInetAddress(); 
    port = socket.getPort(); 
    System.out.println("address: " + address); 
    System.out.println("Node Port number: " + port); 

    clientlist.addNode(new Createclient(address, port));   
    System.out.println("Current clients connected: " + clientlist); 
    break;  
    } catch (Exception error) { 

    } 
} 
} 

下面是創建客戶端類創建該節點:

如果
public class Createclient { 

private String name; 
private InetAddress address; 
private final int port; 
private String nodeInfo; 

public Createclient(InetAddress a, int p){ 
    address = a; port = p; 
} 

public InetAddress getAddress() { 
    return address; 
} 

public int getPort() { 
    return port; 
} 

@Override 
public String toString(){ 
return address + " " + port; 
} 
} 

對不起代碼是凌亂。我對Java和編程非常陌生。

UPDATE:

節點列表覆蓋那個被輸入到列表中的節點。當我打印列表時,它顯示剛剛輸入的節點,而不是將節點添加到現有列表/隊列。

public class clientList { 

private String name = "client:"; 
private String nodeInformation; 

LinkedList cleintList = new LinkedList(); 

public void Name(String name){ 
    this.name = name; 
} 

public void addclient (Createclient client){ 
    clientList.addLast(name + client.getAddress() + " : " + client.getPort()); 
} 

@Override  
public String toString() { 
    StringBuilder sringb = new StringBuilder(); 
    for(Object client clientList) { 
    sringb.append(node + "\n"); 
    } 
return sringb.toString(); 
} 

任何幫助將是太棒了。謝謝。

+0

哪個符號找不到,代碼中的哪個位置會出現此錯誤,您認爲您確定了它的位置?從這段代碼中,我可以看到至少有6個字段可能或可能沒有定義。 –

+0

它說它無法在nodelist.addNode(new CreateNode(address,port))中找到「address」和「port」;並且已經在CreateNode類中定義@PeterLawrey – JavaNovice

回答

0

正如我在我的回答here針對您的上一個問題所說的那樣,您不需要創建NodeList類。

所以更改此

NodeList nodelist = new NodeList(); 

對此

LinkedList<CreateNode> nodelist = new LinkedList<CreateNode>(); 

而且你不需要addNode()方法了,所以改變這種

nodelist.addNode(new CreateNode(address, port)); 

對此

nodelist.add(new CreateNode(nodeIP, nodePort)); 
+0

你能解釋爲什麼這在你的答案中起作用嗎? – snickers10m

+0

@TNT作者問了一個關於同一主題的問題[here](http:// stackoverflow。COM /問題/ 30006221 /提取信息,從流和節能功能於鏈表/ 30006371#30006371)。我不知道他爲什麼提出新的問題,而不是討論他以前的問題? – MChaker

+0

這工作!謝謝。我現在有另一個問題。當我嘗試打印列表時,節點將覆蓋列表中的第一個節點而不是添加到後面。有任何想法嗎? @MChaker – JavaNovice

0

它說它無法在nodelist.addNode(new CreateNode(address,port))中找到「address」和「port」;並已在CreateNode類中定義

您在CreateNode中定義了它,但它必須有一個值,然後才能將它傳遞給構造函數。

我懷疑你打算使用你在前面的行中定義的nodeIPNodePort。即

nodelist.addNode(new CreateNode(nodeIP, nodePort)); 

要麼或這些變量應該改名來匹配你如何使用它們。