안드로이드 개발 질문/답변
(글 수 40,700)
예제를 사용해서 UDP 통신하는걸 연습하고 있습니다
c#으로 메시지를 보내면 클라이언트가 받는 간단한 형식인데
c#이랑 자바는 통신이 잘 되는걸 확인했습니다
문제는 안드로이드인데, 계속 오류가 뜹니다 (Cannot assign requested address)
컴퓨터에서 돌릴때에도 공유기내의 IP를 사용했습니다. 폰은 물론 와이파이 연결되어 있는 상태로 공유기랑 연결되어 있기 때문에 내부IP로 접속할 수 있는 상태죠 (이전에 TCP 소켓 통신할때 잘되는걸 확인했구요)
포트는 그냥 7777 쓰는데 이게 문제가 될거 같지는 않은데 말이죠...
public class UDPServer extends Thread { private DatagramSocket socket; byte[] inbuf = null; public UDPServer() throws SocketException { super(); // DatagramPacket을 받기 위한 Socket 생성 try { InetAddress ia = InetAddress.getByName("192.168.100.62"); socket = new DatagramSocket(7777, ia); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void run() { while (true) { try { // 데이터를 받을 버퍼 inbuf = new byte[1024]; // 데이터를 받을 Packet 생성 DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length); // 데이터 수신 // 데이터가 수신될 때까지 대기됨 socket.receive(packet); // 수신된 데이터 출력 //이 부분만 안드로이드에서 수정했습니다. Thread.sleep(200); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Error : " + e.getMessage()); } } } public static void main(String args[]) throws SocketException{ UDPServer server = new UDPServer(); server.start(); }
안드로이드에서 바꾼 부분은 위의 출력 부분, 에러 출력 부분(로그로 출력), 메인 대신에 onCreate 메소드에서 handler와 runnable을 이용해서 스레드 생성(본문의 스레드 슬립과 반복을 빼고 handler와 runnable로 대신했습니다) 정도입니다.
어디서 하고 계신지는 알수 없으나... 일부의 경우 multicastLock을 이용해야 잘되는 경우가 있는거 같더군요...