네트워크의 브로드 캐스트 주소에서 브로드 캐스트되는 패킷을 수신하도록 Android 앱을 프로그래밍하고 있습니다 (테스트를 거쳐 패킷이 브로드 캐스트되고 "UDP Sender / Receiver"애플리케이션에서도 수신됩니다.) 내 앱을 가져 와서 존재한다고 알려주세요. 장치가 동일한 네트워크에 있고 전송 장치의 코드가 작동하고 독점적입니다. 다음은 앱의 기본 DatagramSocket 코드입니다.
package com.ti.cc3x.android;
import java.io.IOException;
import java.net.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class buttonListener extends Activity {
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.listener);
final TextView txt = (TextView)findViewById(R.id.txt1);
new Thread( new Runnable(){
public void run(){
try {
String text = null;
int server_port = 12356;
byte[] message = new byte[66];
DatagramPacket p = new DatagramPacket(message, message.length);
DatagramSocket s = new DatagramSocket(server_port);
while(text == null){
s.receive(p);
text = new String(message, 0, p.getLength());
txt.setText("Messed up.");
}
if(text != null){
Toast.makeText(buttonListener.this, text, Toast.LENGTH_LONG).show();
txt.setText("Received");
s.close();
}
}
catch (SocketException se) {
se.printStackTrace();
Toast.makeText(buttonListener.this, "Socket Error", Toast.LENGTH_LONG).show();
txt.setText("Socket Error");
}
catch (IOException ioe) {
ioe.printStackTrace();
Toast.makeText(buttonListener.this, "Network Error", Toast.LENGTH_LONG).show();
txt.setText("Network Error");
}
}
}).start();
}}
도움을 주시면 감사하겠습니다!
업데이트 된 코드 :
package com.ti.cc3x.android;
import java.io.IOException;
import java.net.*;
import java.util.Arrays;
import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.MulticastLock;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
public class buttonListener extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.listener);
WifiManager wifi = (WifiManager)
getSystemService(Context.WIFI_SERVICE);
WifiManager.MulticastLock lock = wifi.createMulticastLock("Log_Tag");
final TextView txt = (TextView) findViewById(R.id.txt1);
lock.acquire();
new Thread( new Runnable(){
public void run(){
try {
String text = null;
int server_port = 12356;
byte[] message = new byte[66];
DatagramPacket p = new DatagramPacket(message, message.length);
DatagramSocket s = new DatagramSocket(server_port);
//while(text == null){
s.receive(p);
text = new String(message, 0, p.getLength());
txt.setText("Messed up.");
//}
//if(text != null){
Toast.makeText(buttonListener.this, text, Toast.LENGTH_LONG).show();
txt.setText("Received");
s.close();
//}
}
catch (SocketException se) {
se.printStackTrace();
Toast.makeText(buttonListener.this, "Socket Error", Toast.LENGTH_LONG).show();
txt.setText("Socket Error");
}
catch (IOException ioe) {
ioe.printStackTrace();
Toast.makeText(buttonListener.this, "Network Error", Toast.LENGTH_LONG).show();
txt.setText("Network Error");
}
}
}).start();
lock.release();
}
}
귀하의 답변에서 귀하가 보내는 테스트 패킷이 브로드 캐스트되고 있다고 언급했습니다. 패킷을 브로드 캐스트하는 대신 장치의 IP 주소로 직접 전송하면 패킷을받을 수 있는지 확인하려고 했습니까? 소켓이 제대로 작동하지만 브로드 캐스트 패킷을 수신하지 못할 가능성이 있습니다. 기본적으로 Android Wi-Fi 스택은 전력을 절약하기 위해 멀티 캐스트 패킷을 필터링합니다. IP 주소로 직접 전송 된 패킷을 수신 할 수 있다면을 획득하여 멀티 캐스트 패킷 수신을 활성화하기 만하면됩니다. MulticastLock
자세한 내용은 여기에서 찾을 수 있습니다. Android 기기에서 멀티 캐스트 패키지를 수신하지 않음
그래도 직접 패킷을받을 수없는 경우 다른 문제가있을 수 있지만 먼저 확인하겠습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다