簡體   English   中英

組播套接字服務器無法從android mobile上的特定組播接收

[英]Multicast socket server not able to receive from a particular multicast on android mobile

我有一個充當客戶端的android手機,並將多播數據包發送到239.255.255.253

該代碼是

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
            Thread t=new Thread(new Multi());
        t.start();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

class Multi implements Runnable
{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
                InetAddress ip=InetAddress.getByName("239.255.255.253");
            int port=4270;
            //Create a Multicast socket
            MulticastSocket sock=new MulticastSocket();
            String msg="Hello All";

            DatagramPacket pack=new DatagramPacket(msg.getBytes(),msg.length(),ip,port);
            sock.send(pack);
            sock.close();
                System.out.println("Packet sent");


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 

    }

}

而我的android清單文件是

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.multicast"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.multicast.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Android和PC均通過路由器連接

在我的PC上運行服務器代碼,該代碼僅接收239.255.255.253和224.0.0.2上的數據包。

服務器代碼是

import java.io.*;
import java.net.*;


class receiver
{

    public static void main(String args[])
    {
        try
        {       
            //get the multicast ip
            InetAddress ip1 = InetAddress.getByName("239.255.255.253");
            InetAddress ip2 = InetAddress.getByName("224.0.0.2");
            int port=4270;

            MulticastSocket sock=new MulticastSocket(port);

            //join the multicast group
            sock.joinGroup(ip1);
            sock.joinGroup(ip2);
            while(true)
            {
            //create a datagram packet in which u will receive the msg  
                byte[] buffer=new byte[100];
                DatagramPacket pack=new DatagramPacket(buffer,buffer.length);
                sock.receive(pack);
                InetAddress ip= pack.getAddress();
                System.out.print(ip+":");
                System.out.println("the message received from the sender is "+new String(buffer));
            }
            //sock.close();     
        }
        catch(Exception e){

        }


    }



}

我無法在pc上接收任何數據包,但是當我將客戶端的多播地址更改為“ 224.0.0.2”時,它可以正常工作。 誰能幫我解決這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM