예제를 사용해서 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로 대신했습니다) 정도입니다.