2011-11-23 75 views
0

我是新來的數據報套接字和線程。當我在命令提示符下運行代碼時,我期待看到打印出的6500和6501都只能看到6500.爲什麼代碼沒有運行第二個start()?我怎麼可以線程多個接收數據報套接字(最簡單的方式,不一定是最好的方式)?java線程和數據報套接字接收

public class startThread { 
public static void main(String[] args) throws Exception, IOException { 
    new routerInterface(6500, "receive").start(); 
    new routerInterface(6501, "receive").start(); 
} 
} 

public routerInterface(int virPort, String action) throws Exception{ 
    System.out.println(virPort); 
    if (action.compareTo("receive")==0){ 
     request = new DatagramSocket(clientPort); 
     receive(); 
    } 
} 

public static void receive() throws Exception{ 
     while(true) { 
      System.out.println("We are recieving here"); 
      DatagramPacket p = new DatagramPacket(udpPack, udpPack.length); 
      request.receive(p); 
      byte[] reciv = p.getData(); 
     } 
} 
+1

此代碼在語法上不正確,沒有任何意義。 –

+0

@DmitryBeransky很可能下次你可以解釋爲什麼它在語法上是不正確的,沒有意義,而不是簡單地說。這是第一次寫一個線程,我不知道我需要run()方法。 –

+0

你是否通過java編譯器運行這個示例代碼?因爲我不明白這是如何編譯的。 –

回答

1

您需要從run()方法調用,而不是從構造函數中調用。

+0

謝謝我不知道線程需要run()方法。 –

+1

@KevinMoore然後我建議你仔細看一下Javadoc的Thread和Runnable,也可能是Java Tutorial的相關部分。 – EJP

+0

是的,我應該更多地通過Javadoc。我正在使用一個教程來獲得儘可能遠的效果,我忽略了運行方面,認爲它只是一個隨機的名稱,而不是必需的。我很忙。我同意你的看法,但在提出一個基本問題之前,我應該多讀些書 –

0

看起來像你在構造函數而不是運行方法中收到。所以第一個阻止。第二從未開始。