如何在Android中使用UDP接收数据?
我使用以下代码从特定端口接收数据。它在Android中不起作用。但将数据发送到特定端口工作正常如何在Android中使用UDP接收数据?,android,Android,我使用以下代码从特定端口接收数据。它在Android中不起作用。但将数据发送到特定端口工作正常 public class UDPDemo extends Activity { private TextView tv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
public class UDPDemo extends Activity {
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.recv_message);
try {
DatagramSocket clientsocket=new DatagramSocket(9876);
byte[] receivedata = new byte[1024];
while(true)
{
DatagramPacket recv_packet = new DatagramPacket(receivedata, receivedata.length);
Log.d("UDP", "S: Receiving...");
clientsocket.receive(recv_packet);
String rec_str = new String(recv_packet.getData());
tv.setText(rec_str);
Log.d(" Received String ",rec_str);
InetAddress ipaddress = recv_packet.getAddress();
int port = recv_packet.getPort();
Log.d("IPAddress : ",ipaddress.toString());
Log.d(" Port : ",Integer.toString(port));
}
} catch (Exception e) {
Log.e("UDP", "S: Error", e);
}
}
}
如果您正在使用仿真器,您可能需要进行设置,请记住仿真器位于虚拟路由器后面 换句话说,在中键入这些命令
telnet localhost 5554
redir add udp:9876:9876
然后再试一次。
创建数据报数据包
try {
mDataGramSocket = new DatagramSocket(Config.PORT_NUMBER);
mDataGramSocket.setReuseAddress(true);
mDataGramSocket.setSoTimeout(1000);
} catch (SocketException e) {
e.printStackTrace();
}
通过AsyncTask调用下面的函数
创建无限接收的函数
public void receive() {
String text;
byte[] message = new byte[1500];
DatagramPacket p = new DatagramPacket(message, message.length);
try {
while (true) { // && counter < 100 TODO
// send to server omitted
try {
mDataGramSocket.receive(p);
text = new String(message, 0, p.getLength());
// If you're not using an infinite loop:
//mDataGramSocket.close();
} catch (SocketTimeoutException | NullPointerException e) {
// no response received after 1 second. continue sending
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
// return "error:" + e.getMessage();
mReceiveTask.publish("error:" + e.getMessage());
}
// return "out";
}
public void receive(){
字符串文本;
字节[]消息=新字节[1500];
DatagramPacket p=新的DatagramPacket(message,message.length);
试一试{
while(true){/&&计数器<100 TODO
//忽略发送到服务器
试一试{
mDataGramSocket.receive(p);
text=新字符串(消息,0,p.getLength());
//如果您没有使用无限循环:
//mDataGramSocket.close();
}捕获(SocketTimeoutException | NullPointerException e){
//1秒后未收到响应。是否继续发送
e、 printStackTrace();
}
}
}捕获(例外e){
e、 printStackTrace();
//return“error:+e.getMessage();
mReceiveTask.publish(“错误:+e.getMessage());
}
//返回“out”;
}
您是在设备上还是在模拟器上尝试此操作?此问题是否已解决?如果我们帮助了你,你能标记为已回答吗?这些评论应该添加到哪里?没关系,我发现了。供日后参考: