我試圖在Android上實現UDP服務器,我可以發送數據包到服務器,但無法接收它。另外我試圖運行沒有android的接收器,它的工作原理。哪裏有問題?在android上無法接收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;
}
Android的接收器:
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我正在我的上一個的HTC Legend應用程序,而不是在模擬器
我想我找到了。 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 2011-03-20 06:18:26
你使用哪個端口?接收方可以接收你的數據?你的身邊無法從接收方獲取數據?應該使用端口> 1024來避免系統服務端口,例如。端口u可以使用的是10000發送數據,端口10001接收數據 – 2014-12-19 02:26:31