亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

關于管理藍牙SDP記錄和游戲服務器之間連接的若干建議

2019-11-18 16:13:04
字體:
來源:轉載
供稿:網友

放眼市場上各種各樣的JSR82 MIDlets,有一點需要注意,一些MIDlets并沒有以一種合適的方式處理服務發現協議(SDP)記錄。在藍牙領域內SDP記錄是非常難以領會的,但是在JSR82中并沒有這么困難。

這篇短小的文章會就SDP記錄的一般問題給予一些建議。

我們先簡要地看看為什么需要SDP記錄。SDP記錄是一種用來確認設備上的一種特定服務的記錄。沒有SDP記錄,一部移動電話就不可能檢測到另一個設備上的服務。大部分的電話擁有一個以上的SDP記錄,例如,它們很可能有對于L2CAP和串口的記錄。

關于SDP記錄最主要的問題的就是很多開發者忘記了從數據庫中刪除SDP記錄。這就導致了最終用戶不能重新連接來運行游戲

下面兩張簡單的圖片說明了這個問題:

關于管理藍牙SDP記錄和游戲服務器之間連接的若干建議(圖一)

圖1  SDP連接成功

如圖1所示兩個MIDlets正在試圖進行連接,并且連接成功。

關于管理藍牙SDP記錄和游戲服務器之間連接的若干建議(圖二)

圖2 SDP連接失敗

在圖2中我們可以看到,一個MIDlet再一次嘗試連接(可能是同一用戶或者一個新用戶)。連接失敗,因為這個MIDlet試圖連接的SDP記錄沒有監聽器,所以Bluetooth棧除了拒絕連接別無選擇。經常發生的情況是,客戶端MIDlet接收到兩者的SDP記錄,但是只選擇第一個進行連接,因為它只希望在一個服務器上有一個SDP記錄。

在下面的代碼示例中了,展示了一個簡單的服務器。這個例子關注了必須的close()調用。

例子:


public class SEMCSPPServer extends Thread
{
  PRivate StreamConnectionNotifier server = null;
  private StreamConnection sppConnection = null;

  public SEMCSPPServer()
  {
    // This will create create an SDP record in the dB
    try
    {
      server = (StreamConnectionNotifier)Connector.open( "BTspp://localhost:ea834a8566aa4e0fb02ce4c1a53700c9;name=SomeServer" );
    }
    catch( Exception e ) {}
  }

  public void run()
  {
    // Wait for connections
    try
    {
      sppConnection = server.acceptAndOpen();
    }
    catch( Exception e ) { e.printStackTrace(); }

    // Let the server do something fun here

    try
    {
      // Open the Streams to be used for communications
      InputStream in = sppConnection.openInputStream();
      OutputStream out = sppConnection.openOutputStream();
         
      // Let the server do something fun here
      while()
      {
      }

      // Server is done, now cleanup


      // Close the Streams
      try
      {
        in.close();
      }
      catch( IOException ioe ) {}
      try
      {
        out.close();
      }
      catch( IOException ioe ) {}

      in = null;
      out = null;
    }
    catch( Exception e ) {}


    // Close the Connection
    try
    {
      sppConnection.close();
    }
    catch( IOException ioe ) {}
    sppConnection = null;

    // To make it possible for a client to re-connect
    //   we need to remove the current SDP record
    // If the MIDlet ends here we SHOULD still
    //  close the notifier, but the MIDlet environment will
    //  clean-up after us
    server.close();
  } // run
}

自然地,你就擁有了幾種類型不同的服務器管理者,它們管理所有的服務器連接,并且使SDP記錄重新利用,例如,有一種服務器管理者始終監聽連接。例如,在一個多玩家的藍牙游戲中允許玩家隨時進入和退出。

服務器管理者例子:

// A simple server handler
public class SEMCSPPServerHandler
{
  private StreamConnectionNotifier server = null;
  private StreamConnection sppConnection = null;

  public SEMCSPPServerHandler()
  {
    // This will create create an SDP record in the dB
    try
    {
      server = (StreamConnectionNotifier)Connector.open( "btspp://localhost:ea834a8566aa4e0fb02ce4c1a53700c9;name=SomeServer" );
    }
    catch( Exception e ) {}


    while( true )
    {
      // Wait for connections
      try
      {
        sppConnection = server.acceptAndOpen();
      }
      catch( Exception e ) { e.printStackTrace(); }

      if( sppConnection != null )
      {
        SEMCSPPServer sp = new SEMCSPPServer( sppConnection );
        sp.start();
        sp = null;
      }
      // The server handler is now ready to deal with new connections
      // Note, there is no need to create a new SDP record
    }


    // Remove the SDP record
    server.close();
  }
}

// A simple server class to deal with 1 connection
public class SEMCSPPServer extends Thread
{
  private StreamConnection sppConnection = null;

  public SEMCSPPServer( StreamConnection sppConnection )
  {
    this.sppConnection = sppConnection;
  }

  public void run()
  {
    try
    {
      // Open the Streams to be used for communications
      InputStream in = sppConnection.openInputStream();
      OutputStream out = sppConnection.openOutputStream();
         
      // Let the server do something fun here
      while()
      {
      }
      // Server is done, now cleanup


      // Close the Streams
      try
      {
        in.close();
      }
      catch( IOException ioe ) {}
      try
      {
        out.close();
      }
      catch( IOException ioe ) {}

      in = null;
      out = null;
    }
    catch( Exception e ) {}

    // Close the Connection
    try
    {
      sppConnection.close();
    }
    catch( IOException ioe ) {}
    sppConnection = null;
    // The server is no longer active
  } // run

}

需要學習的經驗

如果Connector. open()調用沒有很好的管理,除非退出MIDlet(這種情況下SDP數據庫被在一個清空)否則要重新連接到那個SDP記錄是不可能的?,F實生活中,你必須要退出游戲然后重新啟動,這將會使最終用戶灰心地離開。

當然,在你可以的應用中可能包括多于一個的SDP記錄,但是對于適當的功能性需求要確保MIDlet監聽所有的記錄。

原文地址:http://developer.sonyeriCSSon.com/site/global/techsupport/tipstrickscode/java/p_advice_bluetooth_sdp_game+server.jsp


(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
热re99久久精品国产66热| 国产v综合ⅴ日韩v欧美大片| 精品免费在线视频| 国产欧美日韩精品丝袜高跟鞋| 久久久久久久久久久亚洲| 欧美国产日韩免费| 国产日韩中文在线| 欧美激情中文网| 亚洲女人天堂网| 亚洲aⅴ男人的天堂在线观看| 久久久精品国产| 久久久久久久久久久免费| 国产区精品视频| 久久久久久久影视| 97超视频免费观看| 国产精品第10页| 成人免费黄色网| 亚洲性日韩精品一区二区| 国产69久久精品成人| 欧美成人黑人xx视频免费观看| 日韩中文综合网| 久久99久久99精品免观看粉嫩| 国产精品久久久av久久久| 国产www精品| 久久免费少妇高潮久久精品99| 亚洲色图第一页| 高清欧美一区二区三区| 久热国产精品视频| 精品亚洲一区二区三区| 中文字幕免费精品一区| 久久夜精品香蕉| 亚洲午夜精品久久久久久久久久久久| 精品少妇一区二区30p| 亚洲一区二区黄| 亚洲国产精品va在线| 在线观看久久久久久| 91av网站在线播放| 日韩最新中文字幕电影免费看| 在线成人中文字幕| 精品中文字幕乱| 欧美成人精品xxx| 日韩精品久久久久久福利| 成人激情在线播放| 日韩高清av一区二区三区| 久久精品国产综合| 久久综合伊人77777| 久久久久久久国产精品视频| 韩国福利视频一区| 日韩精品中文字幕在线观看| 美女少妇精品视频| 欧美极品美女视频网站在线观看免费| 欧美日韩一区二区在线播放| 国产成人在线精品| 国产欧美一区二区| 最近更新的2019中文字幕| 海角国产乱辈乱精品视频| 国产精品美女av| 91亚洲精品一区| 欧美丰满少妇xxxx| 国产91ⅴ在线精品免费观看| 中文字幕日韩在线视频| 欧美网站在线观看| 久久中文久久字幕| 欧美巨乳在线观看| 欧美重口另类videos人妖| 日韩麻豆第一页| 成人激情电影一区二区| 欧美精品久久久久久久免费观看| 久久精品99久久久久久久久| 色悠久久久久综合先锋影音下载| 在线视频日本亚洲性| 欧美激情一区二区三区久久久| 欧美日韩在线另类| 91色中文字幕| 国产精品久久久久一区二区| 欧美日韩国产中字| 海角国产乱辈乱精品视频| 亚洲第一福利网站| 国产又爽又黄的激情精品视频| 成人网址在线观看| 91人成网站www| 欧美精品成人91久久久久久久| 亚洲精品视频网上网址在线观看| 国产精品99久久久久久www| 国产精品久久久久久婷婷天堂| 日韩av电影手机在线| 欧美日韩国产999| 精品中文字幕久久久久久| 国产丝袜一区视频在线观看| 欧美激情第三页| 亚洲石原莉奈一区二区在线观看| 日韩精品极品在线观看播放免费视频| 国产日韩欧美日韩大片| 欧美黑人视频一区| 亚洲男人天堂2023| 日本午夜在线亚洲.国产| 国产精品永久免费| xxxxx成人.com| 久久国内精品一国内精品| 国产精品旅馆在线| 日韩电影免费在线观看中文字幕| 国产精品极品美女在线观看免费| 欧美激情一级二级| 亚洲欧美一区二区三区情侣bbw| 久久99国产精品自在自在app| 97福利一区二区| 亚洲人成在线观看| 国产精品久久久久久久久免费看| 8090理伦午夜在线电影| 综合av色偷偷网| 久久综合久中文字幕青草| 久久天天躁狠狠躁夜夜躁| 国产精品日韩在线| 国a精品视频大全| 欧美激情在线一区| 欧美超级乱淫片喷水| 亚洲精品xxx| 国产精品网红福利| 日韩在线中文字幕| 色偷偷偷综合中文字幕;dd| 亚洲国产天堂久久综合网| 欧美日韩国产一区中文午夜| 日韩欧美中文免费| 国产精品露脸自拍| 91超碰中文字幕久久精品| 亚洲国产欧美一区二区丝袜黑人| 亚洲欧美精品伊人久久| 久久久久久网址| 国产精品女人久久久久久| 精品视频在线观看日韩| 久色乳综合思思在线视频| 91精品啪aⅴ在线观看国产| 国产综合福利在线| 欧美日韩在线看| 国产日韩精品在线播放| 日本最新高清不卡中文字幕| 2020欧美日韩在线视频| 日韩中文在线中文网三级| 中文字幕日韩欧美| 国产成人精品一区二区| 91精品国产综合久久香蕉最新版| 日韩理论片久久| 欧美激情一区二区三级高清视频| 亚洲天天在线日亚洲洲精| 欧美理论电影在线观看| 久久久免费精品| 最新国产成人av网站网址麻豆| 4k岛国日韩精品**专区| 黑人巨大精品欧美一区二区| 日韩精品视频免费| 国产精品海角社区在线观看| www.色综合| 最近中文字幕日韩精品| 高跟丝袜欧美一区| 一区二区欧美在线| 亚洲女人天堂成人av在线| 久久久精品2019中文字幕神马| 亚洲欧美日韩国产精品| 欧美黄色小视频| 久久免费观看视频| 日本久久久久亚洲中字幕| 久久福利网址导航| 日韩精品中文字幕视频在线| 一区二区av在线|