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 阅读(597) 评论(0)  编辑  收藏 所属分类: java

只有注册用户登录后才能发表评论。


网站导航: