[問題] broadcast and socket server
功能描述:
有A,L二個device
A:android
L:linux
如果A發一個udp broadcast package 假設稱之為Apackage,
則L會回覆一個udp package 假設稱之為Lpackage。
Apackage的Destination port:55555,source port:不指定。
Lpackage的Destination port:不指定,source port55555,address: A的address
=========以上條件無法修改=============================================
所以其實L那一方我是無法做任何修改的,我自己在A上面寫了一個app,發送
Apackage的部份已完成,而且我確定Lpackage有發出來(使用wireshark側錄),
只是我一直無法收到Lpackage,這該如何是好呢?
一還請不吝指教,謝謝大家。
下面是我發送Apackage的程式片段,以及收Lpackage的程式片段:
private void sendBroadcastTo(){
byte[] recvBuf = new byte[512];
byte[] data = { (byte)0xaa,(byte)0x00,(byte)0x00, (byte)0xdd };
Log.i(TAG,"data[0]:"+data[0]);
Log.i(TAG,"data[1]:"+data[1]);
Log.i(TAG,"data[2]:"+data[2]);
Log.i(TAG,"data[3]:"+data[3]);
try {
//socket = new DatagramSocket();
socket.setBroadcast(true);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
socket.close();
}
DatagramPacket packet=null;
DatagramPacket recvPacket=new DatagramPacket(recvBuf,recvBuf.length);
try {
InetAddress addr= getBroadcastAddress();
Log.i(TAG,"broadcast addr:"+addr.getHostAddress());
packet = new DatagramPacket(data, data.length,
addr, 55555);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
Log.i(TAG,"socket.send(packet)");
socket.send(packet);
Log.i(TAG,"send data:"+data);
/*
Log.i(TAG,"socket.receive(recvPacket)");
socket.receive(recvPacket);
String getData = new String(recvPacket.getData(), 0, recvPacket.getLength());
Log.i(TAG,"recvPacket:"+getData);
*/
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
socket.close();
}
}
private void UDPSocketServerListen() {
DatagramSocket socketRecv =null;
try {
Log.i(TAG, "Server: Start connectingn");
socketRecv = new DatagramSocket(0);
socketRecv.setSoTimeout(6000);
byte[] buf = new byte[512];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
Log.i(TAG, "Server: Receiving...");
socketRecv.receive(packet);
Log.i(TAG,
"Server: Message received: ‘"
+ new String(packet.getData()) + "’n");
Log.i(TAG, "Server: Succeed!n");
} catch (Exception e) {
Log.i(TAG, "Server: Error!n");
}finally{
socketRecv.close();
}
}
private void UDPSocketServerListen2() {
ServerSocket receiver;
Socket socket = null;
byte[] buf = new byte[512];
try {
receiver = new ServerSocket(0);
Log.i(TAG,"UDPSocketServerListen2 wait accept");
socket = receiver.accept();
Log.i(TAG,"accept success!!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i(TAG,"accept fail!!");
}
BufferedReader in = null;
try {
in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String str;
try {
str = in.readLine();
Log.i("received response from server", str);
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.163.2.22
※ 編輯: cutem 來自: 118.163.2.22 (01/14 18:33)