[問題] broadcast and socket server

看板AndroidDev作者 (大少爺)時間12年前 (2014/01/14 18:31), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
功能描述: 有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)
文章代碼(AID): #1IrH8U6E (AndroidDev)