现在流行的网络业务莫过于短信了.网易新浪等都因此而盈利,股价上涨.我凭自己的经验和公司支持,也就
乘着东风来研究一下了!
首先,你要选择一台移动或者联通的短信服务器做你们的发送短信接口.这是最关键的一步,也是最底层的,
当然这是需要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; } |