两个安卓设备之间的java udp通信:如何响应
我正在开发一个应用程序,如果用户连接到同一个网络,它将允许用户彼此通信。 我有udp_服务器类和sendMessage客户端方法。 问题是当客户端向服务器发送消息(sendMessage方法)时,服务器正确地读取了消息,但当服务器发送回复时,会显示消息已发送的Toast-这意味着respone已发送,但客户端未接收到消息。尝试catc块也不要捕获任何异常
udp_服务器类:
private class MyDatagramReceiver extends Thread {
private boolean bKeepRunning = true;
private String lastMessage = "";
public void run() {
String message;
byte[] lmessage = new byte[1024*512];
final DatagramPacket packet = new DatagramPacket(lmessage, lmessage.length);
try {
final DatagramSocket socket = new DatagramSocket(11234);
while(bKeepRunning) {
socket.receive(packet);
message = new String(lmessage, 0, packet.getLength());
lastMessage = message;
runOnUiThread(updateTextMessage);
byte[] response = "response".getBytes();
final DatagramPacket response_packet = new DatagramPacket(response,response.length,InetAddress.getByName("192.168.8.111"),11234);
socket.send(response_packet);
runOnUiThread(new Runnable() {
@Override
public void run() { Toast.makeText(getApplicationContext(),"sended",Toast.LENGTH_LONG).show();
}
});
}
} catch (final Throwable e) {
e.printStackTrace();
}
}
public void kill() {
bKeepRunning = false;
}
public String getLastMessage() {
return lastMessage;
}
}
private Runnable updateTextMessage = new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),"recived",Toast.LENGTH_LONG).show();
if (myDatagramReceiver == null) return;
adapter.add(myDatagramReceiver.getLastMessage());
}
}
客户端发送消息方法:
private void sendMessage(final String message) {
Thread thread = new Thread(new Runnable() {
String stringData;
@Override
public void run() {
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
InetAddress serverAddr = InetAddress.getByName("192.168.8.188");
DatagramPacket dp;
dp = new DatagramPacket(message.getBytes(), message.length(), serverAddr, 11234);
ds.send(dp);
byte[] lMsg = new byte[1000];
dp = new DatagramPacket(lMsg, lMsg.length);
ds.receive(dp);
stringData = new String(lMsg, 0, dp.getLength());
} catch (final IOException e) {
e.printStackTrace();
} finally {
if (ds != null) {
ds.close();
}
}
}
});
thread.start();
}
有人知道那里发生了什么吗
决议: 我将sendMessage方法中的recive部分代码放入while循环,如下所示:
boolean keepWaiting = true;
while(keepWaiting) {
ds.receive(packet);
stringData = new String(lMsg, 0, packet.getLength());
runOnUiThread(respone); //there I analize response
keepWaiting = false;
}
共 (0) 个答案