posts - 22,comments - 35,trackbacks - 0

          首先,你要選擇一臺移動或者聯(lián)通的短信服務(wù)器做你們的發(fā)送短信接口.這是最關(guān)鍵的一步,也是最底層的,

          當(dāng)然這是需要much money的,呵呵.沒辦法!現(xiàn)實(shí)了點(diǎn)....

          然后你就是在連接接口的服務(wù)器做技術(shù)了.用JAVA 的 SOCKET 來監(jiān)聽客戶端的SOCKET,當(dāng)然這是需要一定的

          難度,和普通是有很多的區(qū)別,例如每秒鐘可以同時接受3000條SOCKET... ...,要進(jìn)行客戶端的認(rèn)證.要進(jìn)行數(shù)據(jù)

          流轉(zhuǎn)輸?shù)募用?.. ...

          最后就是來處理客戶端的發(fā)送SOCKET了,其實(shí)他們傳輸都是字節(jié)Byte...


          public class Client
          {
             
          //構(gòu)造函數(shù)
             public Client()
             
          {
                connectStatus 
          = false;
                loginStatus 
          = false;
                default_ip 
          = "";
                default_port 
          = 0;
                default_user 
          = "";
                default_password 
          = "";
                connection 
          = null;
                input 
          = null;
                out 
          = null;
                binput 
          = null;
             }


             
          //連接函數(shù)
             public boolean connect(String ip, int port)
             
          {
                
          boolean result = false;
                
          if(ip == null || ip.indexOf("."< 1)
                ip 
          = default_ip;
                
          if(port < 1)
                port 
          = default_port;

                
          try{
                   connection 
          = new Socket(ip, port);
                   input 
          = connection.getInputStream();
                   binput 
          = new BufferedInputStream(input);
                   out 
          = connection.getOutputStream();
                   result 
          = true;
                   connectStatus 
          = true;
                   default_ip 
          = ip;
                   default_port 
          = port;
                }

                
          catch(Exception e){
                   result 
          = false;
                }

                
          return result;
             }


             
          //登錄函數(shù)
             public int login(String userName, String password){
                
          int loginRes = -1;
                
          if(!connectStatus)
                   
          return 1;
                
          if(userName == null || userName.trim().equals(""))
                   
          return 24;
                
          byte loginData[] = new byte[43];
                setIntData(
          43, loginData, 0);
                setIntData(
          1, loginData, 4);
                setIntData(
          1, loginData, 8);
                userName.getBytes(
          0, userName.length(), loginData, 12);
                password.getBytes(
          0, password.length(), loginData, 22);
                loginData[
          38= 1;
                setTime((
          new Date()).getTime() / (long)1000, loginData, 39);
                
          try{
                   out.write(loginData);
                   out.flush();
                   
          byte rec[] = new byte[30];
                   
          char ret = '\0';
                   
          int i = 0;
                   
          do{
                      
          if(i >= 400)
                         
          break;
                      
          if(binput.available() > 0){
                         input.read(rec, 
          030);
                         ret 
          = (char)rec[12];
                         
          break;
                      }

                      Thread.sleep(
          50L);
                      i
          ++;
                   }
           while(true);

                   
          if(ret == 'T'){
                      loginStatus 
          = true;
                      default_user 
          = userName;
                      default_password 
          = password;
                      
          int k = 0;
                      
          return k;
                   }

                   loginRes 
          = 1;
                }

                
          catch(Exception e){
                   
          int j = 1;
                   
          return j;
                }

                
          return loginRes;
             }


             
          //發(fā)送函數(shù)

             
          public int submit(String servicer_id, int msg_type, int status_report, String src_addr, String dest_addr, String schedule, String expire,int msg_fmt, byte msg_content[], String fee_type, String fee_code, String fee_mobile, 
          String fee_by, 
          int pid){

                
          int subRes = -1;
                
          if(!connectStatus || !loginStatus)
                
          return 1;
                
          byte submitData[] = new byte[264];
                setIntData(
          264, submitData, 0);
                setIntData(
          4, submitData, 4);
                setIntData(
          1, submitData, 8);
                servicer_id.getBytes(
          0, servicer_id.length(), submitData, 12);
                submitData[
          22= (byte)msg_type;
                submitData[
          23= (byte)status_report;
                
          if(src_addr == null || src_addr.trim().length() < 1)
                   
          return 14;
                src_addr.getBytes(
          0, src_addr.length(), submitData, 24);
                
          if(dest_addr == null || dest_addr.trim().length() < 1)
                
          return 15;
                dest_addr.getBytes(
          0, dest_addr.length(), submitData, 45);
                
          if(schedule != null && schedule.trim().length() > 1 && !setTime(schedule, submitData,66))
                   
          return 16;
                
          if(expire != null && expire.trim().length() > 1 && !setTime(expire, submitData, 70))
                   
          return 17;
                submitData[
          74= (byte)msg_fmt;
                submitData[
          75= (byte)msg_content.length;
                System.arraycopy(msg_content, 
          0, submitData, 76, msg_content.length);
                fee_type.getBytes(
          0, fee_type.length(), submitData, 236);
                fee_code.getBytes(
          0, fee_code.length(), submitData, 244);
                
          if(fee_mobile != null && fee_mobile.trim().length() > 11)
                fee_mobile 
          = fee_mobile.substring(2);
                fee_mobile.getBytes(
          0, fee_mobile.length(), submitData, 250);
                fee_by.getBytes(
          02, submitData, 261);
                
          if(pid < 0 || pid > 256)
                   pid 
          = 0;
                submitData[
          263= (byte)pid;
                
          boolean reSend = false;
                
          try{
                   out.write(submitData);
                   out.flush();
                }

                
          catch(Exception e){
                   reSend 
          = true;
                }

                
          if(reSend){
                   
          int sendTimes = 0;
                   
          do{
                      
          if(sendTimes >= 2)
                         
          break;
                      
          try{
                         connect(default_ip, default_port);
                         login(default_user, default_password);
                         out.write(submitData);
                         out.flush();
                         reSend 
          = false;
                         
          break;
                      }

                      
          catch(Exception exception){
                         sendTimes
          ++;
                      }

                   }
           while(true);
                }

                
          if(reSend){
                   connectStatus 
          = false;
                   loginStatus 
          = false;
                   
          return 1;
                }

                
          try{
                   
          byte sub[] = new byte[17];
                   
          char sRet = '\0';
                   
          int i = 0;
                   
          do{
                      
          if(i >= 1500)
                         
          break;
                      
          if(binput.available() > 0){
                         input.read(sub, 
          017);
                         sRet 
          = (char)sub[16];
                         
          break;
                      }

                      Thread.sleep(
          10L);
                      i
          ++;
                   }
           while(true);
                
          if(sRet == 'T')
                   subRes 
          = 0;
                
          else
                   subRes 
          = 11;
                }

                
          catch(Exception e){
                   subRes 
          = 1;
                }

                
          return subRes;
             }
           

          }


          posted on 2006-02-17 10:06 kelven 閱讀(614) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 商丘市| 汶上县| 临颍县| 霍林郭勒市| 江油市| 犍为县| 新建县| 河北省| 锦州市| 武胜县| 达日县| 元朗区| 吴堡县| 高雄市| 普安县| 库车县| 永胜县| 中江县| 登封市| 吉安县| 凌海市| 武胜县| 葫芦岛市| 河间市| 石嘴山市| 蒲江县| 额济纳旗| 陕西省| 苏尼特右旗| 封开县| 通化市| 十堰市| 和硕县| 漯河市| 来宾市| 永胜县| 湄潭县| 贵南县| 忻州市| 灵璧县| 那坡县|