2011-01-10 85 views
0

Android 2.3支持MulticastSocket嗎?Android 2.3支持MulticastSocket嗎?

我在Java服務器上有一個模塊。該服務器將發送未中斷的信息。我有一個模塊Android客戶端(仿真器虛擬設備)。我將首先啓動android客戶端,以便它等待接收服務器的信息然後我將啓動Java服務器來發送信息。最後我想我的模擬器可以從java服務器接收信息。 PS:如果2個模塊都是java,我會成功的。

這是我的服務器模塊(很簡單)

public class Server { 

    public Server() throws IOException, InterruptedException{ 

     DatagramSocket socket = new DatagramSocket(); 

     byte[] b = new byte[1024]; 

     DatagramPacket dgram = new DatagramPacket(b, b.length,InetAddress.getByName 
    ("239.0.0.1"), 5000); 
     System.err.println("Sending "+b.length+" bytes to "+dgram.getAddress()+':'+ 
    dgram.getPort()); 
     while(true) { 

      System.err.print("."); 
      socket.send(dgram); 

      Thread.sleep(1000); 
     } 
    } 

    } 

這是我的Android模擬器(也很簡單)

public class ClientForm extends Activity { 
    private EditText edcontentview; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.clientform); 
     edcontentview = (EditText)findViewById(R.id.edtcontentview); 
     MulticastLock _wifiMulticastLock = ((WifiManager)this.getSystemService(Activity.WIFI_SERVICE)).createMulticastLock("_wifiMulticastLock"); 
      _wifiMulticastLock.setReferenceCounted(true);  
      _wifiMulticastLock.acquire(); 
     new Thread(new Runnable(){    
      @Override 
      public void run() { 
       byte[] b = new byte[1024]; 
       final DatagramPacket dgram = new DatagramPacket(b, b.length); 
       MulticastSocket socket = null; 
       try { 
       socket = new MulticastSocket(5000); 
       socket.joinGroup(InetAddress.getByName("239.0.0.1")); 
       } catch (IOException e) { 
       e.printStackTrace(); 
       } 
       while(true) { 
       try { 
        socket.receive(dgram); 
        Thread.sleep(1000); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       new Handler().post(new Runnable() { 
       @Override 
        public void run() { 
         edcontentview.append("Received " + dgram.getLength() +  " bytes from " + dgram.getAddress());          
        } 
       }); 
       dgram.setLength(b.length); 
       } 
      } 
     }).start(); 
    } 
    } 

回答

2

是。是不是this你在找什麼?

+0

我不知道。我不能用它來創建一個通過MulticastSocket發送信息給客戶端(Android模擬器)的服務器(PC)。但是當我運行在Java上時,沒關係。我不知道發生了什麼事。如果有人知道。請將代碼發佈到演示(PC和android模擬器模塊)。 – smalltalk 2011-01-10 12:44:34