首先,你要选择一台移动或者联通的短信服务器做你们的发送短信接口.这是最要害的一步,也是最底层的,当然这是需要mUCh money的" />
龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

关于用JAVA开发短信方面的知识

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
?XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" /> 首先,你要选择一台移动或者联通的短信服务器做你们的发送短信接口.这是最要害的一步,也是最底层的,当然这是需要mUCh money的

<?XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" /> 


  
  首先,你要选择一台移动或者联通的短信服务器做你们的发送短信接口.这是最要害的一步,也是最底层的,当然这是需要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, 0, 30);
  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(0, 2, 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, 0, 17);
  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;
  }
  
  
  当然要根据不同的参数来判定不同的错误和正确的发送.就谈这么多了,假如大家有什么不明的,可以和我联系.


  
精彩图集

赞助商链接