PERCY'S DIARY

喉が渇いた

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();