안드로이드에 UDP 서버를 구현하려고했지만 서버로 패킷을 보낼 수는 있지만받을 수는 없습니다. 또한 안드로이드없이 수신기를 실행하려고, 그것은 작동합니다. 문제가 어디에 있습니까? 테스트를위한안드로이드에서 UDP 패킷을받을 수 없습니까?
지역 보낸 사람 :
int send_packet(uint8_t* data) {
int retcode;
int socket_out;
int broadcast = 1;
struct sockaddr_in addr;
socket_out = socket(AF_INET, SOCK_DGRAM, 0);
if (socket_out < 0)
return -1;
setsockopt(socket_out, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof broadcast);
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
addr.sin_port=htons(PORT_NUMBER);
retcode = sendto(socket_out, data, sizeof(packet_data_t), 0,
(struct sockaddr *) &addr, sizeof(addr));
perror("sendto");
close(socket_out);
return 0;
}
안드로이드 수신기
: 내가하지 에뮬레이터에, HTC 전설에 내 응용 프로그램을 실행하고
public void run(){
try {
byte[] buffer = new byte[BUFFER_SIZE];
DatagramSocket socket = new DatagramSocket(getPort());
//socket.setBroadcast(true);
while(true){
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
socket.receive(packet);
(new CallbackWrapper(getPacketReciever())).run();
}
} catch (IOException e) {
e.printStackTrace();
}
}
PS가
나는 그것을 발견했다고 생각한다. http://code.google.com/p/android/issues/detail?id=8407, http://www.flattermann.net/2010/09/fix-udp-broadcasts-on-htc-phones-running- stock-firmware/ – Lunatik
어떤 포트를 사용합니까? 수신 측에서 데이터를 수신 할 수 있습니까? 귀하의 측면에서 수신자 측의 데이터를 가져올 수 없습니까? 시스템 서비스 포트를 피하려면 포트> 1024를 사용해야합니다 (예 : 포트 u는 데이터를 보내려면 10000, 데이터를 수신하려면 포트 10001을 사용할 수 있습니다. –