《J2ME蓝牙实战入门》的源代码来自互联网.docx

上传人:b****5 文档编号:8225998 上传时间:2023-01-30 格式:DOCX 页数:18 大小:33.93KB
下载 相关 举报
《J2ME蓝牙实战入门》的源代码来自互联网.docx_第1页
第1页 / 共18页
《J2ME蓝牙实战入门》的源代码来自互联网.docx_第2页
第2页 / 共18页
《J2ME蓝牙实战入门》的源代码来自互联网.docx_第3页
第3页 / 共18页
《J2ME蓝牙实战入门》的源代码来自互联网.docx_第4页
第4页 / 共18页
《J2ME蓝牙实战入门》的源代码来自互联网.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

《J2ME蓝牙实战入门》的源代码来自互联网.docx

《《J2ME蓝牙实战入门》的源代码来自互联网.docx》由会员分享,可在线阅读,更多相关《《J2ME蓝牙实战入门》的源代码来自互联网.docx(18页珍藏版)》请在冰豆网上搜索。

《J2ME蓝牙实战入门》的源代码来自互联网.docx

《J2ME蓝牙实战入门》的源代码来自互联网

下面附上《J2ME蓝牙实战入门》的源代码(分为三个文件):

StupidBTMIDlet.java

importjavax.microedition.lcdui.Alert;

importjavax.microedition.lcdui.AlertType;

importjavax.microedition.lcdui.Command;

importjavax.microedition.lcdui.CommandListener;

importjavax.microedition.lcdui.Display;

importjavax.microedition.lcdui.Displayable;

importjavax.microedition.lcdui.List;

importjavax.microedition.midlet.MIDlet;

importjavax.microedition.midlet.MIDletStateChangeException;

/**

*@authorJagie

*

*MIDlet

*/

publicclassStupidBTMIDletextendsMIDletimplementsCommandListener

{

Listlist;

ServerBoxsb;

ClientBoxcb;

/*

*(non-Javadoc)

*

*@seejavax.microedition.midlet.MIDlet#startApp()

*/

protectedvoidstartApp()throwsMIDletStateChangeException

{

  list=newList("傻瓜蓝牙入门",List.IMPLICIT);

  list.append("Client",null);

  list.append("Server",null);

  list.setCommandListener(this);

  Display.getDisplay(this).setCurrent(list);

}

/**

*debug方法

*

*@params

*           要显示的字串

*/

publicvoidshowString(Strings)

{

  Displayabledp=Display.getDisplay(this).getCurrent();

  Alertal=newAlert(null,s,null,AlertType.INFO);

  al.setTimeout(2000);

  Display.getDisplay(this).setCurrent(al,dp);

}

/**

*显示主菜单

*

*/

publicvoidshowMainMenu()

{

  Display.getDisplay(this).setCurrent(list);

}

protectedvoidpauseApp()

{

  //TODOAuto-generatedmethodstub

}

publicvoidcommandAction(Commandcom,Displayabledisp)

{

  if(com==List.SELECT_COMMAND)

  {

   Listlist=(List)disp;

   intindex=list.getSelectedIndex();

   if(index==1)

   {

    if(sb==null)

    {

     sb=newServerBox(this);

    }

    sb.setString(null);

    Display.getDisplay(this).setCurrent(sb);

   }

   else

   {

    //每次都生成新的客户端实例

    cb=null;

    System.gc();

    cb=newClientBox(this);

    Display.getDisplay(this).setCurrent(cb);

   }

  }

}

protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException

{

  //TODOAuto-generatedmethodstub

}

}

/////////////////////////////////////////////////////////////

//服务端

ServerBox.java

importjava.io.DataInputStream;

importjava.io.DataOutputStream;

importjava.io.IOException;

importjava.util.Vector;

importjavax.bluetooth.DiscoveryAgent;

importjavax.bluetooth.LocalDevice;

importjavax.bluetooth.ServiceRecord;

importjavax.bluetooth.UUID;

importjavax.microedition.io.Connector;

importjavax.microedition.io.StreamConnection;

importjavax.microedition.io.StreamConnectionNotifier;

importjavax.microedition.lcdui.Command;

importjavax.microedition.lcdui.CommandListener;

importjavax.microedition.lcdui.Displayable;

importjavax.microedition.lcdui.TextBox;

importjavax.microedition.lcdui.TextField;

/**

*服务端GUI

*

*@authorJagie

*

*TODOTochangethetemplateforthisgeneratedtypecommentgotoWindow-

*Preferences-Java-Codestyle-CodeTemplates

*/

publicclassServerBoxextendsTextBoximplementsRunnable,CommandListener

{

Commandcom_pub=newCommand("开启服务",Command.OK,0);

Commandcom_cancel=newCommand("终止服务",Command.CANCEL,0);

Commandcom_back=newCommand("返回",Command.BACK,1);

LocalDevicelocalDevice;

StreamConnectionNotifiernotifier;

ServiceRecordrecord;

booleanisClosed;

ClientProcessorprocessor;

StupidBTMIDletmidlet;

//响应服务的uuid

privatestaticfinalUUIDECHO_SERVER_UUID=newUUID(

   "F0E0D0C0B0A000908070605040302010",false);

publicServerBox(StupidBTMIDletmidlet)

{

  super(null,"",500,TextField.ANY);

  this.midlet=midlet;

  this.addCommand(com_pub);

  this.addCommand(com_back);

  this.setCommandListener(this);

}

publicvoidrun()

{

  System.out.println("hereisrun");

  booleanisBTReady=false;

  try

  {

   localDevice=LocalDevice.getLocalDevice();

   System.out.println("getDevice");

   if(!

localDevice.setDiscoverable(DiscoveryAgent.GIAC))

   {

    showInfo("无法设置设备发现模式");

    return;

   }

   //prepareaURLtocreateanotifier

   StringBufferurl=newStringBuffer("btspp:

//");

   //indicatethisisaserver

   url.append("localhost").append(':

');

   //addtheUUIDtoidentifythisservice

   url.append(ECHO_SERVER_UUID.toString());

   //addthenameforourservice

   url.append(";name=EchoServer");

   //requestalloftheclientnottobeauthorized

   //somedevicesfailonauthorize=true

   url.append(";authorize=false");

   //createnotifiernow

   notifier=(StreamConnectionNotifier)Connector

     .open(url.toString());

   record=localDevice.getRecord(notifier);

   //rememberwe'vereachedthispoint.

   isBTReady=true;

  }

  catch(Exceptione)

  {

   e.printStackTrace();

  }

  //nothingtodoifnobluetoothavailable

  if(isBTReady)

  {

   showInfo("初始化成功,等待连接");

   this.removeCommand(com_pub);

   this.addCommand(com_cancel);

  }

  else

  {

   showInfo("初始化失败,退出");

   return;

  }

  //生成服务端服务线程对象

  processor=newClientProcessor();

  //ok,startacceptingconnectionsthen

  while(!

isClosed)

  {

   StreamConnectionconn=null;

   try

   {

    conn=notifier.acceptAndOpen();

   }

   catch(IOExceptione)

   {

    //wrongclientorinterrupted-continueanyway

    continue;

   }

   processor.addConnection(conn);

  }

}

publicvoidpublish()

{

  isClosed=false;

  this.setString("waitingyouraccept");

  System.out.println("befoutstart");

  newThread(this).start();

  System.out.println("endstart");

}

publicvoidcancelService()

{

  isClosed=true;

  showInfo("服务终止");

  this.removeCommand(com_cancel);

  this.addCommand(com_pub);

}

/*

*(non-Javadoc)

*

*@seejavax.microedition.lcdui.CommandListener#commandAction(javax.microedition.lcdui.Command,

*     javax.microedition.lcdui.Displayable)

*/

publicvoidcommandAction(Commandarg0,Displayablearg1)

{

  if(arg0==com_pub)

  {

   //发布service

   publish();

  }

  else

   if(arg0==com_cancel)

   {

    cancelService();

   }

   else

   {

    cancelService();

    midlet.showMainMenu();

   }

}

/**

*内部类,服务端服务线程。

*

*@authorJagie

*

*TODOTochangethetemplateforthisgeneratedtypecommentgotoWindow-

*Preferences-Java-Codestyle-CodeTemplates

*/

privateclassClientProcessorimplementsRunnable

{

  privateThreadprocessorThread;

  privateVectorqueue=newVector();

  //privatebooleanisOk=true;

  ClientProcessor()

  {

   processorThread=newThread(this);

   processorThread.start();

  }

  publicvoidrun()

  {

   while(!

isClosed)

   {

    synchronized(this)

    {

     if(queue.size()==0)

     {

      try

      {

       //阻塞,直到有新客户连接

       wait();

      }

      catch(InterruptedExceptione)

      {

      }

     }

    }

    //处理连接队列

    StreamConnectionconn;

    synchronized(this)

    {

     if(isClosed)

     {

      return;

     }

     conn=(StreamConnection)queue.firstElement();

     queue.removeElementAt(0);

     processConnection(conn);

    }

   }

  }

  /**

  *往连接队列添加新连接,同时唤醒处理线程

  *

  *@paramconn

  */

  voidaddConnection(StreamConnectionconn)

  {

   synchronized(this)

   {

    queue.addElement(conn);

    notify();

   }

  }

}

/**

*从StreamConnection读取输入

*

*@paramconn

*@return

*/

privateStringreadInputString(StreamConnectionconn)

{

  StringinputString=null;

  try

  {

   DataInputStreamdis=conn.openDataInputStream();

   inputString=dis.readUTF();

   dis.close();

  }

  catch(Exceptione)

  {

   e.printStackTrace();

  }

  returninputString;

}

/**

*debug

*

*@params

*/

privatevoidshowInfo(Strings)

{

  StringBuffersb=newStringBuffer(this.getString());

  if(sb.length()>0)

  {

   sb.append("\n");

  }

  sb.append(s);

  this.setString(sb.toString());

}

/**

*处理客户端连接

*

*@paramconn

*/

privatevoidprocessConnection(StreamConnectionconn)

{

  //读取输入

  StringinputString=readInputString(conn);

  //生成响应

  StringoutputString=inputString.toUpperCase();

  //输出响应

  sendOutputData(outputString,conn);

  try

  {

   conn.close();

  }

  catch(IOExceptione)

  {

  }//ignore

  showInfo("客户端输入:

"+inputString+",已成功响应!

");

}

/**

*输出响应

*

*@paramoutputData

*@paramconn

*/

privatevoidsendOutputData(StringoutputData,StreamConnectionconn)

{

  try

  {

   DataOutputStreamdos=conn.openDataOutputStream();

   dos.writeUTF(outputData);

   dos.close();

  }

  catch(IOExceptione)

  {

  }

}

}

//客户端

importjava.io.DataInputStream;

importjava.io.DataOutputStream;

importjava.io.IOException;

importjava.util.Vector;

importjavax.microedition.io.Connector;

importjavax.microedition.io.StreamConnection;

importjavax.microedition.lcdui.Command;

importjavax.microedition.lcdui.CommandListener;

importjavax.microedition.lcdui.Displayable;

importjavax.microedition.lcdui.*;

importjavax.microedition.lcdui.Gauge;

importjavax.microedition.lcdui.StringItem;

importjavax.microedition.lcdui.TextField;

//jsr082API

importjavax.bluetooth.BluetoothStateException;

importjavax.bluetooth.DeviceClass;

importjavax.bluetooth.DiscoveryAgent;

importjavax.bluetooth.DiscoveryListener;

importjavax.bluetooth.LocalDevice;

importjavax.bluetooth.RemoteDevice;

importjavax.bluetooth.ServiceRecord;

importjavax.bluetooth.UUID;

/**

*客户端GUI

*

*@authorJagie

*

*TODOTochangethetemplateforthisgeneratedtypecommentgotoWindow-

*Preferences-Java-Codestyle-CodeTemplates

*/

publicclassClientBoxextendsFormimplementsRunnable,CommandListener,

  DiscoveryListener

{

//字串输入框

TextFieldinput=newTextField(null,"",50,TextField.ANY);

//loger

StringItemresult=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1