Android UDP通信
そういえばUDP通信について書いてなかったから備忘録として書いとこう。
まずクラスはこんな感じ。
コード汚いだろうけど、とりあえず動いてるのでよし。
送信は間違ってるかも。
package tekitou; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; import android.util.Log; public class socketUDP { private DatagramSocket receiveSocket; private String receiveData; private String message; //別スレッドで実行がほぼ必須 public String getMessage(){ Thread thread=new Thread(){ public void run() { // 5100番ポートを監視するUDPソケットを生成 // DatagramSocket receiveSocket = null; try { receiveSocket = new DatagramSocket(5100); } catch (SocketException e) { e.printStackTrace(); } // 受け付けるデータバッファとUDPパケットを作成 byte receiveBuffer[] = new byte[1024]; DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length); try { receiveSocket.receive(receivePacket); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 受信したデータをログへ出力 message = new String(receivePacket.getData(),0, receivePacket.getLength()); Log.d("TEST", message); } }; thread.start(); try { thread.join(); } catch (InterruptedException e) { Log.d("TEST",e.toString()); } return message; } // 別スレッドで実行するほうがよい public void sendMessage(String message){ // udpソケットで自分のIPで5100番ポートを指定 InetSocketAddress remoteAddress = new InetSocketAddress("192.168.1.1", 5100); // UDPパケットに含めるデータ byte[] sendBuffer = message.getBytes(); // UDPパケット DatagramPacket sendPacket; try { // DatagramSocketインスタンスを生成して、UDPパケットを送信 sendPacket = new DatagramPacket(sendBuffer, sendBuffer.length, remoteAddress); new DatagramSocket().send(sendPacket); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
で、メインの方にはこれ追加。
で、いけるはず。
public socketUDP Listener = new socketUDP(); public String receiveValue; private String[] socketSplit = new String[100]; 〜〜〜〜 (new Thread(new Runnable() { @Override public void run() { while(true) { receiveValue = new String(Listener.getMessage()); socketSplit = receiveValue.split(","); //"a,b,c"みたいなデータを送ったなら、ここで分割して配列に入れる } } })).start();