我尝试在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 上运行我的应用程序,而不是在模拟器上
最佳答案
主要问题出在这一行:
DatagramSocket socket = new DatagramSocket(getPort());
你假设设备的本地主机与机器/计算机相同,但是设备有自己的网卡,因此在任何网络中都有自己的IP,并且有自己的网络地址IP,即他自己。仅通过您机器的一个端口无法访问该设备。
关于java - 无法在 Android 上接收 UDP 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5356527/