안드로이드 개발 질문/답변
(글 수 45,052)
public class Multicastsender implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
MulticastSocket ms;
try {
ms = new MulticastSocket();
ms.setTimeToLive(3);
String msg = "from..";
while (true) {
InetAddress ia = InetAddress.getByName("224.0.1.1");
Log.d("UDP","2");
DatagramPacket data = new DatagramPacket(msg.getBytes(),
msg.getBytes().length, ia, 3000);
Log.d("UDP","3");
ms.send(data);
//Thread.sleep(10);
Log.d("UDP","4");
Log.d("UDP","in while");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
이렇게 쓰레드로 만들어서 보내는 데요... ms.send(data)부분에서 더이상 진행이 안되네요...
아래는 서버 입니다.
public class MulticastListenerThread implements Runnable {
/**
* Constructor for a listener thread
*
* @param ip
* multicast ip address to listen on
* @param port
* port to bind to
*/
MulticastSocket socket = null;
boolean failed = false;
int payloadSize = 256;
public MulticastListenerThread(String ip, int port) {
try {
Log.d("UDP","1");
socket = new MulticastSocket(port);
Log.d("UDP","2");
socket.joinGroup(InetAddress.getByName(ip));
Log.d("UDP","3");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
System.out.println("MulticastSocket creation failed");
failed = true;
}
}
@Override
public void run() {
// TODO Auto-generated method stub
byte[] buf = new byte[16 + payloadSize];
DatagramPacket datagram = new DatagramPacket(buf, buf.length);
// int remainingPackets = -1;
Log.d("UDP","4");
while (true) {
//Utility.fillNulls(buf);
datagram.setData(buf);
try {
Log.d("UDP","5");
socket.receive(datagram);
Log.d("UDP","6");
Log.d("UDP",buf.toString());
} catch (IOException e) {
e.printStackTrace();
}
socket.close();
}
}
}
public class MulticastSocketServerActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WifiManager wifi = (WifiManager)getSystemService( Context.WIFI_SERVICE );
MulticastLock mcLock = wifi.createMulticastLock("mylock");
mcLock.acquire();
MulticastListenerThread m = new MulticastListenerThread("224.0.1.1",3000);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new Thread(m).start();
mcLock.release();
setContentView(R.layout.main);
}
}
뭐 이런식인데 서버는 조인 그룹에서 더이상 진행이 안되고요 ..
로그에 2까지만 찍혀요 클라이언트는 3까지만 찍히고요..
기기는 오드로이드로 adhoc모드로 연결해서 하고 있고요...
권한은
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
이렇게 추가해주었고요..
잘안되서 권한도 추가해주고.. 위에서 굵게 표시한 것들도 추가해주고 했는데 이게 마음같지가 않네요..
당연히 된다고 나와있는 예제에 있는 매쏘드만 써서 구현하는게 안되니 참 답답하네요..
조언부탁드립니다.