2008年5月10日土曜日

SunSpot通信サンプル

この辺見ながら適当に作ったサンプル.
送信側はひたすら"Hello:送信回数"をブロードキャストし続ける.受信側は受信したメッセージをコンソロールに出力し続けるだけという超シンプルなプログラムです.参考までに....

まずは,送信側本体
package org.sunspotworld;

import com.sun.spot.peripheral.Spot;
import com.sun.spot.sensorboard.EDemoBoard;
import com.sun.spot.sensorboard.peripheral.ITriColorLED;
import com.sun.spot.io.j2me.radiostream.*;
import com.sun.spot.io.j2me.radiogram.*;
import com.sun.spot.util.*;
import com.sun.spot.sensorboard.peripheral.*;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

/**
* SunSPOT通信テスト用アプリケーション(送信側)
* ひたすら"Hello World"の文字列をブロードキャストし続ける
*/
public class StartApplication extends MIDlet {
private DatagramSender sender; //!< 通信を行う
private final String PROTOCOL ="radiogram://broadcast:230"; //!< 通信プロトコル
/**
* アプリ開始時に呼ばれる.
* @throws javax.microedition.midlet.MIDletStateChangeException
*/
protected void startApp() throws MIDletStateChangeException{
try {
sender = new DatagramSender(PROTOCOL, 31, 3);
int i = 0;
while(true){
sender.send("Hello:" + Integer.toString(i));
i++;
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
protected void pauseApp() {
// This is not currently called by the Squawk VM
}
protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
}
}


次はデータ送信を行うクラスの例
package org.sunspotworld;

import com.sun.spot.io.j2me.radiogram.RadiogramConnection;
import com.sun.spot.peripheral.Spot;
import java.io.IOException;
import javax.microedition.io.*;

/**
* データグラム送信用クラス
*/
public class DatagramSender {
private DatagramConnection conn;//!< コネクション
private Datagram datagram;//!< データグラム
/**
* コンストラクタ
*/
public DatagramSender(String protocol,int power,int maxHops)throws IOException{
Spot.getInstance().getRadioPolicyManager().setOutputPower(power);
conn = (DatagramConnection)Connector.open(protocol);
((RadiogramConnection)conn).setMaxBroadcastHops(maxHops);
datagram = conn.newDatagram(conn.getMaximumLength());
}
/**
* メッセージ送信メソッド
*/
public synchronized void send(String message) throws IOException{
datagram.reset();
datagram.writeUTF(message);
conn.send(datagram);
}

}


最後に受け手側本体
package org.sunspotworld;

import com.sun.spot.sensorboard.*;
import com.sun.spot.io.j2me.radiostream.*;
import com.sun.spot.io.j2me.radiogram.*;
import com.sun.spot.util.*;
import com.sun.spot.peripheral.*;
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.midlet.*;
import java.util.*;

/**
* SunSPOT通信テスト用アプリケーション(受信側)
* ひたすら受け取ったパケットをコンソロールに表示し続ける
*/
public class StartApplication extends MIDlet {
private final String PROTOCOL = "radiogram://:230"; ///< 通信プロトコル文字列
private DatagramConnection conn; //!< コネクション
private Datagram datagram;//< データグラム
/**
* アプリ開始時に呼ばれる
* @throws javax.microedition.midlet.MIDletStateChangeException
*/
protected void startApp() throws MIDletStateChangeException {
try {
Spot.getInstance().getRadioPolicyManager().setOutputPower(31);
conn = (DatagramConnection) Connector.open(PROTOCOL);
datagram = conn.newDatagram(conn.getMaximumLength());
while (true) {
datagram.reset();
conn.receive(datagram);
String message = datagram.readUTF();
System.out.println(message);
}
} catch (IOException ex) {
ex.printStackTrace();
}
}

protected void pauseApp() {
}
protected void destroyApp(boolean unconditional) throws MIDletStateChangeException {
}
}

0 件のコメント: