[英]Can't receive UDP packet on android?
I tried to implement UDP server on Android, i can send packets to server, but can't received it. 我尝试在Android上实现UDP服务器,但可以将数据包发送到服务器,但无法接收。 Also i tried run receiver without android, it works. 我也试过没有Android的运行接收器,它的工作原理。 Where is the problem? 问题出在哪儿?
Local sender for Testing: 本地发件人进行测试:
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 receiver: 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 I am running my application on a HTC Legend, not on emulator ps我在HTC Legend而不是模拟器上运行我的应用程序
The main problem is on this line: 主要问题是在这条线上:
DatagramSocket socket = new DatagramSocket(getPort());
You are assuming that the local host of the device is the same as the machine/computer, but the device has got its own network card, consequently having his own IP in any network, and his own network address IP, which is his own. 您假设设备的本地主机与机器/计算机相同,但是设备拥有自己的网卡,因此在任何网络中都具有自己的IP,以及自己的网络地址IP。 The device is not reachable through just a port of your machine. 仅通过机器的端口无法访问该设备。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.