国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

j2me網(wǎng)絡(luò)實(shí)戰(zhàn)指南

2019-11-18 16:20:59
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  cleverpig的blog:http://www.matrix.org.cn/blog/cleverpig

本文描述了在J2me中開(kāi)發(fā)主要使用的網(wǎng)絡(luò)連接方法,分別詳細(xì)介紹了使用http和socket兩種方法。

網(wǎng)絡(luò)實(shí)戰(zhàn)第一部分:httpconnection

首先我們先來(lái)看一個(gè)簡(jiǎn)單的例子吧:

主要用到的java包:javax.microedition.io.*;

  public String requestGET(String URLString,String URL) throws IOException{
    // =============================================================
    // URLString是HTTP地址,URL為后面的參數(shù)
    // 這里的例子是發(fā)送用的用戶(hù)名和密碼到服務(wù)器端進(jìn)行用戶(hù)驗(yàn)證
    // 比如 String URLString = "http://192.168.0.1:8080/login.jsp"
    //           String URL = "?Name="+this.txtName+"&Pass="+this.txtPass
    // =============================================================
    
    HttpConnection hpc = null;
    DataInputStream dis = null;

    boolean newline = false;

    String content = "";
    try{
      // ===========================================================
      // 建立連接
      // ===========================================================
      hpc = (HttpConnection)Connector.open(URLString+URL);
      hpc.setRequestMethod(HttpConnection.GET);

      dis =  new DataInputStream(hpc.openInputStream());

      int character;
      // ===========================================================
      // 讀取返回的HTTP內(nèi)容
      // ===========================================================
      while((character = dis.read()) != -1){
        if((char)character == '//'){
          newline = true;
          continue;
        }
        else{
          if((char)character =='n'&& newline){
            content +="/n";
            newline = false;
          }
          else if(newline){
            content +="http://" +(char)character;
            newline = false;
          }
          else{
            content +=(char)character;
            newline = false;
          }
        }
      }
    }
    catch(IOException e){
      System.out.    }
    finally{
      if(hpc != null){
        hpc.close();
        hpc = null;
      }
      if(dis != null){
        dis.close();
      }
    }
    // ===============================================================
    // 由于內(nèi)容可能有中文,所以在接受到信息后要對(duì)內(nèi)容進(jìn)行字符集的轉(zhuǎn)換
    // ===============================================================
    content = (unicodeTogb2312(content)).trim();
    return content;
  }

public static String unicodeTogb2312(String s){
    if (s==null){ return ""; }
    if (s.equals("")){ return s; }
    try{
      return new String(s.getBytes("ISO8859_1"),"gb2312");
     }
    catch(Exception uee){
      return s;
     }
  }

以上就是一個(gè)簡(jiǎn)單的HTTP連接并且從服務(wù)器獲取響應(yīng)信息的例子,應(yīng)該很簡(jiǎn)單了吧。客戶(hù)端就是上面那個(gè)樣子,服務(wù)器端只要配置好IIS,增加一個(gè)網(wǎng)頁(yè)來(lái)對(duì)客戶(hù)端的請(qǐng)求做出響應(yīng)就行了,其實(shí)跟一般的網(wǎng)頁(yè)請(qǐng)求沒(méi)有多大區(qū)別,很簡(jiǎn)單吧!!

網(wǎng)絡(luò)實(shí)戰(zhàn)第二部分:socketconnection

下面還是從實(shí)例入手講一下J2me的Socket編程。
        程序首先打開(kāi)以
ip地址為192.168.0.1:6666的Socket連接,如果連接失敗則拋出異常,程序結(jié)束。如果Socket連接成功,則繼續(xù)。
  
  
  public boolean SocketConn(String s) throws IOException{
    // =============================================================
    // s是Socket連接字符串
    // 這里的例子是發(fā)送用的用戶(hù)名和密碼到服務(wù)器端進(jìn)行用戶(hù)驗(yàn)證
    // 比如 String s = "socket://192.168.0.1:6666"
    // =============================================================
    
    private StreamConnection conServer;
    private String strServerAddr;
    private boolean bConnected;
    
    conServer = null;
    strServerAddr = s; // 連接地址
    bConnected = false; // 連接狀態(tài)
    
        try
        {
            conServer = (StreamConnection)Connector.open(strServerAddr);
        }
        catch(Exception exception)
        {
            System.out.println("Connect server error");
            bConnected = false;
            return false;
        }
        bConnected = true;
        System.out.println("connect ok!");
        return true;
  }

上面的Socket客戶(hù)端連接程序就應(yīng)該算是完工了,下面是搭建服務(wù)器端對(duì)客戶(hù)端的連接進(jìn)行響應(yīng)。
建立服務(wù)器端程序,只需要有以下代碼即可:

  ..........
  try{
    // 建立端口為6666的socket服務(wù)器
    ServerSocketConnection SocketSer;
    SocketSer = (ServerSocketConnection)Connector.open("socket://:6666");
    
    // 等待客戶(hù)端連接
    SocketConnection sc;
    // 如有連接,則新增一個(gè)線(xiàn)程對(duì)連接進(jìn)行處理
    sc = (SocketConnection)SocketSer.acceptAndOpen();
    ..........
    while(true){
      // 對(duì)sc的InputStream和OutPutStream進(jìn)行處理

    }
  }
  ..........

        在這里需要說(shuō)明一下我的看法,手機(jī)通過(guò)Socket連接上服務(wù)器后,由于我用的是中國(guó)移動(dòng)的號(hào)碼,所以跑的是GPRS通道,我所建立的服務(wù)器連接所獲得的客戶(hù)端IP只是一個(gè)虛擬IP,而這個(gè)IP估計(jì)是以用戶(hù)當(dāng)前最近的移動(dòng)機(jī)站的編碼通過(guò)一些變化而產(chǎn)生的,所以當(dāng)用戶(hù)不停的移動(dòng)的時(shí)候,IP也許會(huì)發(fā)生變化(這里我就不太清楚了),有興趣的可以去看看“移動(dòng)虛擬IP技術(shù)”相關(guān)的報(bào)道。本來(lái)我以前的想法是用戶(hù)連接到服務(wù)器后只要IP不變就可以實(shí)現(xiàn)服務(wù)器向客戶(hù)端廣播數(shù)據(jù),但是這個(gè)IP并非是長(zhǎng)連接,服務(wù)器在廣播數(shù)據(jù)的時(shí)候也許會(huì)有很大部分的客戶(hù)端的IP會(huì)出現(xiàn)變化,所以最后還是采用由客戶(hù)端主動(dòng)發(fā)送信息的形式。感覺(jué)有點(diǎn)扯遠(yuǎn)了,還是回到正題吧。
客戶(hù)端在建立Socket連接成功后,即可向服務(wù)器發(fā)送信息,以下是發(fā)送信息模塊

  protected boolean sendData(byte abyte0[])//自己替換[]
    {
        System.out.println("send :" + bConnected);
        // 判斷連接情況
        if(!bConnected)
            return false;
        OutputStream outputstream = null;
        try
        {
            outputstream = conServer.openOutputStream();
            // 寫(xiě)信息到outputstream中
            outputstream.write(abyte0);
            // 我的理解是強(qiáng)制送出所有已經(jīng)寫(xiě)了的信息
            outputstream.flush();
            outputstream.close();
        }
        catch(Exception exception)
        {
            System.out.println("Send Data error");
            bConnected = false;
            try
            {
                if(outputstream != null)
                    outputstream.close();
                // 調(diào)用斷開(kāi)連接的函數(shù)
                disconnect();
            }
            catch(Exception exception1) { }
            return false;
        }
        return true;
    }

下面是讀取服務(wù)器響應(yīng)的信息,其他的就不一一說(shuō)了,把outputstream改為inputstream,然后使用inputstream的read方法就可以了。
   ..............
   inputstream = conServer.openInputStream();  
   ..............
以上就是J2me開(kāi)發(fā)主要使用的網(wǎng)絡(luò)連接方法,包括http和socket,其他還有datagram之類(lèi)的,那個(gè)因?yàn)槲覜](méi)有用過(guò),所以就不好亂說(shuō)了,基本上以上兩種來(lái)做網(wǎng)絡(luò)開(kāi)發(fā)就足夠了,怎么樣,是不是很簡(jiǎn)單呀。以上看法和觀(guān)點(diǎn)屬于自己拙見(jiàn),如有錯(cuò)誤,請(qǐng)高手指出。進(jìn)入討論組討論。

(出處:http://m.survivalescaperooms.com)



發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 霍州市| 监利县| 大庆市| 弥勒县| 玉屏| 广德县| 兴义市| 定远县| 惠东县| 镇远县| 濮阳市| 武功县| 翼城县| 双辽市| 德令哈市| 桐梓县| 彩票| 阳泉市| 出国| 徐州市| 寿阳县| 宁强县| 云安县| 原平市| 吉安县| 沭阳县| 日土县| 鞍山市| 增城市| 山西省| 昌乐县| 公安县| 黄浦区| 喀喇沁旗| 长宁区| 澄迈县| 分宜县| 探索| 普陀区| 普陀区| 扶余县|