UDP로 브로드캐스팅하는 소켓 프로그램을 만들고 있습니다.
socket = new DatagramSocket(SERVER_PORT);
socket.setBroadcast(true);
이런 식으로 소켓을 뚫어서
DatagramPacket packet = new DatagramPacket(text1.getBytes(), text1.getBytes().length, InetAddress.getByName(255.255.255.255), SERVER_PORT);
이런 식으로 전송하고
public class MessageReciver extends Thread {
public void run() {
try {
while (keepRunning) {
byte[] buffer = new byte[1000];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
}catch (IOException e) {
e.printStackTrace();
}
}
이렇게 받습니다.
정말 간략하게 썻지만 정말로 입출력이 잘 됩니다.
문제는 "한번"에 안간다는 겁니다.
전송을 하면, 안가는데, 두번쨰 시도하면 안갑니다. 근데 그 이후로 하는 시도는 한번에 척척 잘 가집니다.
그리고 한 30초정도 IDLE타임을 갖고 또 시도하면 안갑니다. 두번째 혹은 세번째부터 척척가기 시작합니다.
아무래도 TCP라면 전송이 안되면 다시시도해서 전송신뢰성을 보장하겠지만 UDP는 그렇지도 않고,
제 좁은 소견으로는 UDP의 특성이라기보다는 안드로이드폰 자체가 잠깐이라도 IDLE타임에는
보낼 준비 혹은 받을 준비를 하지 않고 있는 것 같습니다, socket.recv(packet); 스레드를 계속 돌려도 말입니다.
어디서 줏어들은 바로
if (wifiLock == null) {
WifiManager wifiManager = (WifiManager) this.getSystemService(this.WIFI_SERVICE);
wifiLock = wifiManager.createWifiLock("wifilock");
wifiLock.setReferenceCounted(true);
wifiLock.acquire();
}
도 추가시키고 퍼미션도 줬는데 결과는 마찬가지입니다.
한번에 안 갑니다.
혹시 안펍 고수분들 중에 해결 방법이 있으신분 알려주시면 감사하겠습니다.