udp  서버(안드로이드)  <ㅡ>  클라이언트(pc) 를 아래와 같이 구성하려고 합니다.

 

                socket                    socket

                      |                              |

                  bind                     connect

                      |                              |

                  receive                    send

 

-----------------------------------------------------------------------------------

 

문제는 클라이언트 pc에서 안드로이드 서버로 메시지 전송이 잘 되지 않습니다.

 

혹시나 하는 마음에 안드로이드 서버에

클라이언트를 작성하여 쓰레드로 1초후 접속을 하도록 테스트를 해보았습니다.

 

그 결과, 메시지를 보내는데 성공했습니다.

그렇다면 외부에서의 메시지 전송이 왜 실패하는 걸까요??

 

 

먼저 안드로이드 서버에 함께 올려 테스트해본 java client source는

byte[] buf = ("hi").getBytes();
InetAddress svrAddr = InetAddress.getByName("xxx.xxx.xx.xx");
DatagramSocket socket = new DatagramSocket();
DatagramPacket packet = new DatagramPacket(buf, buf.length, svrAddr, 9000);
socket.send(packet);


외부 접속을 테스트 한 C client source 는

socket(AF_INET, SOCK_DGRAM, 0);
connect(fd, (struct sockaddr *) &svrAddr, sizeof(svrAddr));
send(fd,  (const char*)data, len, 0);

 

server(안드로이드)는 아래와 같이 jni로 작성하였습니다.

socket(AF_INET, SOCK_DGRAM, 0);
bind(fd, (struct sockaddr *) &servAddr, sizeof (servAddr));
recvfrom(fd, rcv_data, rcv_num, 0, (struct sockaddr *) &cliAddr, &cliLen);

 

물론 자바 또한 외부에서 접속을 시도 했으나 실패하였습니다.

무엇이 문제일까요....

 

 

작업환경 : 갤럭시탭 froyo2.2.1