posts - 22,comments - 35,trackbacks - 0

          首先,你要選擇一臺移動或者聯通的短信服務器做你們的發送短信接口.這是最關鍵的一步,也是最底層的,

          當然這是需要much money的,呵呵.沒辦法!現實了點....

          然后你就是在連接接口的服務器做技術了.用JAVA 的 SOCKET 來監聽客戶端的SOCKET,當然這是需要一定的

          難度,和普通是有很多的區別,例如每秒鐘可以同時接受3000條SOCKET... ...,要進行客戶端的認證.要進行數據

          流轉輸的加密... ...

          最后就是來處理客戶端的發送SOCKET了,其實他們傳輸都是字節Byte...


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


             
          //連接函數
             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;
             }


             
          //登錄函數
             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;
             }


             
          //發送函數

             
          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
          主站蜘蛛池模板: 武隆县| 荥阳市| 岳阳市| 金塔县| 合江县| 长顺县| 中江县| 分宜县| 梅州市| 平利县| 广德县| 南丹县| 隆子县| 云林县| 红桥区| 河南省| 景泰县| 长武县| 墨脱县| 镇原县| 汉寿县| 德兴市| 罗城| 岑巩县| 靖安县| 昌宁县| 奉节县| 翼城县| 安塞县| 云和县| 雷波县| 新宾| 信阳市| 弥勒县| 镇赉县| 鄢陵县| 玉溪市| 布拖县| 镇原县| 红河县| 保靖县|