现在流行的网络业务莫过于短信了.网易新浪等都因此而盈利,股价上涨.我凭自己的经验和公司支持,也就乘着东风来研究一下了!

首先,你要选择一台移动或者联通的短信服务器做你们的发送短信接口.这是最关键的一步,也是最底层的,

当然这是需要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 = '';
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 = '';
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;
}

当然要根据不同的参数来判断不同的错误和正确的发送,就谈这么多了。

关于用JAVA开发短信方面的知识的更多相关文章

  1. java pdu短信解码

    java pdu短信解码 长短信未验证 有兴趣的可以试试 根据python的方法改写的 /** * PDU短信解析 * * * @param pduPayload * @return */ publi ...

  2. java发送短信--httpclient方式

    最近头让我写个发送短信的java程序检测BI系统,检查数据库是否有异常发送,有则发送短信到头的手机里.这里我直说httpclient方式的get请求方式,并且已经有方式的短信的接口了,所以只要再加上参 ...

  3. Java应用短信猫

    首先确定短信猫正常连接到主机,并安装SIM卡.先用超级终端测试短息猫能不能用.安装minicom:#sudo apt-get install minicom安装完成后,执行#sudo minicom ...

  4. iOS开发——短信验证码

    作为iOS开发者,大家都应该知道ShareSDK这个比较出名的第三方分享(带统计功能)开发工具包. 他的官网今年年初发布了短信验证码的SDK.本文介绍它的短信验证码SDK.(部分过程参考官网如何集成的 ...

  5. java发送短信验证码

    业务: 手机端点击发送验证码,请求发送到java服务器端,由java调用第三方平台(我们使用的是榛子云短信http://smsow.zhenzikj.com)的短信接口,生成验证码并发送. SDK下载 ...

  6. 【Java】短信信息提取设计

    问题产生:当有要求做信息有效性校验的时候,如何提取短信中有用的信息? 举个例子:有这样一条短信消息: [XXXXXX提醒]尊敬的客户,截止03月21日15:29,您本月套餐中包含手机上网国内流量累计1 ...

  7. Java发送短信

    1.接口使用介绍 发送短信肯定需要使用第三方接口,Java本身是肯定不能直接发送短信的.第三方接口有很多,这里直接找个正规靠谱一点的学习一下 这里使用了中国网建(http://sms.webchine ...

  8. java发送短信验证码的功能实现

    总结一下发送短信验证码的功能实现 (题外话:LZ是在腾讯云买的第三方(山东鼎信)短信服务平台的接口,1块钱20次的套餐来练手,哈哈,给他们打个广告,有需要的可以去购买哈,下面是购买链接短信服务平台购买 ...

  9. Java实现短信中提取号码

    Description 提取一条短信里所有的电话号码,电话号码之间换行打印,短信的内容由用户输入. Input 第一行有个整数n(1≤n≤1000)表示测试用例的个数.其后的每一行中有一条短信,每一条 ...

随机推荐

  1. Linux 查看某个程序所在端口的 PID

    lsof -i:8085 加入显示的是2001 kill 2001 就可以杀死程序了

  2. [linux]iostat命令详解-监视系统输入输出设备和CPU的使用情况

    部分转载https://blog.csdn.net/sunansheng/article/details/51942281 iostat命令被用于监视系统输入输出设备和CPU的使用情况.它的特点是汇报 ...

  3. IBM Security App Scan 资料整理

    转自:http://blog.csdn.net/u013147600/article/details/50002089 这是学习和使用IBM AppScan过程中总结整理的一些资料.   扫描系统操作 ...

  4. go结构体组合函数

    结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就简的语言,一切令人困惑的特性都必须去掉. 简单来讲,Go提供的结构体就是把使用各种数据类型定义的不同变量组合起来的高级数 ...

  5. Hibernate学习之双向一对多映射(双向多对一映射)

    © 版权声明:本文为博主原创文章,转载请注明出处 1.双向映射与单向映射 - 一对多单向映射:由一方(教室)维护映射关系,可以通过教室查询该教室下的学生信息,但是不能通过学生查询该学生所在教室信息: ...

  6. CSS基础2——选择器

    前面说过样式规则.也知道了样式规则语法形式为:选择器+声明块 如:div{ color:black:padding:10px; }   div即表示选择器(此处是元素选择器),花括号里的内容就是声明块 ...

  7. Weka学习之关联规则分析

    步骤: (一) 选择数据源 (二)选择要分析的字段 (三)选择需要的关联规则算法 (四)点击start运行 (五) 分析结果 算法选择: Apriori算法参数含义 1.car:如果设为真,则会挖掘类 ...

  8. 【LeetCode-面试算法经典-Java实现】【118-Pascal&#39;s Triangle(帕斯卡三角形)】

    [118-Pascal's Triangle(帕斯卡三角形(杨辉三角))] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given numRows, generate ...

  9. 【转】使用Python学习selenium测试工具

    出处:https://my.oschina.net/u/1433482/blog/633231?fromerr=vaxqh9bn

  10. jmeter java 请求 payload

    1.注册页面抓包看见内容如下: POST http://test.nnzhp.cn/bbs/forum.php?mod=post&action=edit&extra=&edit ...