java实现基于SGIP协议开发联通短信的方法
本文实例讲述了java实现基于SGIP协议开发联通短信的方法。分享给大家供大家参考。具体如下:
近段时间,由于公司的业务需要,开发出了联通短信.此文章的编写也是根据网上的一些示例来完成的.闲话少说,下面来看代码:(运行此程序的时候需要导入华为的开发包,此包可以到网上下载)
下行:
publicclassMt{
privatestaticStringSPNumber="**********";
//接入号码
privatestaticStringChargeNumber="000000000000000000000";
//计费号码,白名单
privatestaticStringServiceType="";
//服务类型
privatestaticStringhost="***.***.***.***";
//主机名,网关IP
privatestaticintport=****;
//端口号
privatestaticStringCorpId="*****";
//企业代码
privatestaticStringlogin_Name="**";
//登陆名
privatestaticStringlogin_PassWord="***";
//登陆密码
publicstaticvoidmain(String[]args)throwsUnsupportedEncodingException{
intsrcnode=newBigInteger("*******").intValue();
//源节点编号(nodeid),这一步非常重要,华为包中,该字段类型为int,而接入协议中要求在企业代码前加上30000,这样就超过了int的取值范围,所以需要用BigInteger转一下就可以了
Argsargstr=newArgs();//设定连接参数
argstr.set("host",host);
argstr.set("port",port);
argstr.set("transaction-timeout",10);
//操作超时时间(单位:秒)
argstr.set("read-timeout",15);
//物理连接读操作超时时间(单位:秒)
argstr.set("source-addr",srcnode);
//SP…ID(最大为六位字符)
argstr.set("login-name",login_Name);
argstr.set("login-pass",login_PassWord);
argstr.set("debug","false");
//连接登陆
SGIPSMProxysgipsmp=newSGIPSMProxy(argstr);
//这里连接到短信息网关
try{
//connect表示向SMG登陆,登录名与密码分别是SMG向SP分配的用户名与密码,调用这个接口方法,向SMG发送Bind命令消息。
//如果发送消息超时或通信异常则抛出异常,需要调用者捕获处理。
booleanreslut=sgipsmp.connect(login_Name,login_PassWord);
//登陆得到true和false
if(reslut){
System.out.println("连接成功...........");
}else{
System.out.println("连接失败(用户名或密码错误)...........");
return;
}
}catch(Exceptionex){
System.out.println("网络异常...........");
ex.printStackTrace();
return;
}
String[]UserNumber={"8618686619970","8618686619977"};
//接收短信的手机号码,前边要加上86
Stringcontent="联通短信发送成功";
byte[]MessageContent=content.getBytes("GB2312");
System.out.println("短信内容:"+content);
try{
//下发短息
SGIPSubmitMessagesgipsubmit=newSGIPSubmitMessage(
SPNumber,//SP的接入号码
ChargeNumber,//付费号码string
UserNumber,//接收该短消息的手机号,最多100个号码string[]
CorpId,//企业代码,取值范围为0~99999string
ServiceType,//业务代码,由SP定义stirng
03,//计费类型int
"0",//该条短消息的收费值stirng
"0",//赠送用户的话费string
0,//代收费标志0:应收1:实收int
0,//引起MT消息的原因int
06,//优先级0~9从低到高,默认为0int
null,//短消息寿命的终止时间date
null,//短消息定时发送的时间date
1,//状态报告标记int
0,//GSM协议类型int
0,//GSM协议类型int
15,//短消息的编码格式int
0,//信息类型int
MessageContent.length,//短消息内容长度int
MessageContent,//短消息的内容btye[]
"0"//保留,扩展用string
);
//收到的响应消息转换成rep
intstatus=ProcessSubmitRep(sgipsmp.send(sgipsubmit));
System.out.println(status);
if(status==0){
System.out.println("消息发送成功..........");
}else{
System.out.println("消息发送失败..........");
}
}catch(Exceptionex){
ex.printStackTrace();
}
}
privatestaticintProcessSubmitRep(SGIPMessagemsg){
//收到的响应消息转换成repMsg
SGIPSubmitRepMessagerepMsg=(SGIPSubmitRepMessage)msg;
System.out.println(repMsg.getSrcNodeId());
System.out.println("status:::::::"+repMsg.getResult());
if(repMsg!=null&&repMsg.getResult()==0){
System.out.println("发送成功:::");
}
returnrepMsg.getResult();
}
}
上行:
publicclassMoextendsSGIPSMProxy{
//SMG服务器信息
privatestaticStringserHost="***.***.***.***";
privatestaticintserviceport=****;
//本机信息
privatestaticStringlocalhost="***.***.***.***";
privatestaticintlocalport=****;
publicMo(Argsargs){
super(args);
System.out.println("进入启动监听........");
startService(localhost,localport);
//我想知道这里传递的host和port是本地的还是那的
}
publicstaticvoidmain(String[]args)
{
Argsargstr=newArgs();
argstr.set("serHost",serHost);
argstr.set("serviceport",serviceport);
argstr.set("localhost",localhost);
argstr.set("localport",localport);
argstr.set("transaction-timeout",10);
//操作超时时间(单位:秒)
argstr.set("read-timeout",15);
//物理连接读操作超时时间(单位:秒)
//这里的安全认证问题如何解决?
Momymo=newMo(argstr);
}
publicSGIPMessageonDeliver(SGIPDeliverMessagemsg){
ProcessRecvDeliverMsg(msg);
System.out.println("正在等待接收.......");
returnsuper.onDeliver(msg);
}
publicvoidProcessRecvDeliverMsg(SGIPMessagemsg){
if(msginstanceofSGIPSubmitRepMessage){
//是否是类的实例
System.out.println("返回下发短信的相应消息");
}
if(msginstanceofSGIPDeliverMessage){
//收到用户发送的短信(上行)
SGIPDeliverMessagedeliverMsg=(SGIPDeliverMessage)msg;
StringuserNumber=deliverMsg.getUserNumber();
//手机号码
StringmsgContent=deliverMsg.toString();
//短信内容
//byte[]msgId=deliverMsg.getMsgContent();
System.out.println("userNumber::::::"+deliverMsg.getUserNumber());
System.out.println("msgcontent:::::::"+deliverMsg.toString());
System.out.println("spNumber::::::::"+deliverMsg.getSPNumber());
//log.info("收到消息:"+deliverMsg);
System.out.println("收到消息:"+deliverMsg);
intcommandId=deliverMsg.getCommandId();
//响应类型
System.out.println("commandId:::::::::"+commandId);
if(commandId==0){//上传短信(接收)
System.out.println("dstaddr::::::"+deliverMsg.getSPNumber());
try{
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
}
}
希望本文所述对大家的java程序设计有所帮助。