Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1502760
  • 博文数量: 3500
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 43870
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-03 20:31
文章分类

全部博文(3500)

文章存档

2008年(3500)

我的朋友

分类:

2008-05-04 19:20:11

一起学习
现在流行的网络业务莫过于短信了.网易新浪等都因此而盈利,股价上涨.我凭自己的经验和公司支持,也就 乘着东风来研究一下了! 首先,你要选择一台移动或者联通的短信服务器做你们的发送短信接口.这是最关键的一步,也是最底层的, 当然这是需要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; } 当然要根据不同的参数来判断不同的错误和正确的发送.就谈这么多了,如果大家有什么不明的,可以和我联系. 作者简介: 22岁,大学计算机系专业,现正致力于JAVA开发,对JAVA的桌面应用系统开发和WEB相关技术有一定研究, 曾开发jant,jzip,小型游戏,JDBC..etc,对J2EE/J2ME充满信心。 你可以通过网站:、 OICQ:29578635,878229,email:kkjvk12@yeah.net和vincent联系。 下载本文示例代码


关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识关于用JAVA开发短信方面的知识
阅读(81) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~