[英]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.