2011-01-10 68 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