用JAVA编写其于SGIP协议的短信开发

最近刚好接手公司的基于SGIP协议的短信开发。所以这里面总结一下,也希望对那此刚好接手这方面的开发人员有帮助。在开发SGIP的短信必须先于联通的SP那边的业务人员打好相关的手续。这一方面不是有我来做的。所以对此我不是很清楚。我只知道只要手续做完之后他们会给你一些信息。其中一定要有网关接入IP、网关接入端口、登录名、登录密码、网关接入号、服务类型号码、企业代号。当然在开发过程你可能还会遇到相关的节点号。好心的人话也节点号一同发给你,当然有些却没有。不过不用当心,这方面的知道网上一片。这里我不想多说。

刚接手的时候我向相关办理这方面的人拿接口,他却说没有接口对方也叫我们去网上随便一下接口,很多。我们也按他们的意思下了一个。记得名字叫:SPAPI.JAR。我在网上看了几篇相关的文章,我也开始动手写代码。刚开始的时候就出现了一个很奇怪的错误。我连接上了登录名和密码也没有错,却一直不让我登录成功。后来没有办法我也在ITEYE里面发表相关的问题,也有一个好心的朋友给我发来的EMAIL说明了相关的错误。在这里我表示感谢。而这个错很简单就是绑定提交信息的IP不正确。原来在办理手续的时候公司的业务员把另一个不是开发用的IP给SP服务商。所以让我一直报错误码:57的错误。57表示非法IP或是IP不正确。之前我还为是网关接入IP不正确。希望刚开始接手的开发人员注意一下。其他的问题那就是接收短信的时候乱码问题。不过这句 “new String(deliver.getMessageByte(),"UnicodeBigUnmarked")“就可决解。原因我自己也不是很清楚。有高手的话可以自己去分析相关的问题。
下面是我开发的一些代码

package com;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigInteger;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

import spApi.Bind;
import spApi.BindResp;
import spApi.Deliver;
import spApi.DeliverResp;
import spApi.Report;
import spApi.ReportResp;
import spApi.SGIP_Command;
import spApi.SGIP_Exception;
import spApi.Submit;
import spApi.SubmitResp;
import spApi.Unbind;
import spApi.UnbindResp;
import spApi.Userrpt;
import spApi.UserrptResp;

public class SMSHelper {
//发送短消息
public static void sendLetter() {
Socket so=null;
OutputStream out=null;
InputStream input=null;
Bind command=null;
Bind com=null;
SGIP_Command sgip=null;
SGIP_Command tmp=null;
int i=0;

try {
sgip=new SGIP_Command();
command=new Bind(xxxxxxxxxx);//节点号
command.SetLoginType(1);
command.SetLoginName("xxxxxxx");
command.SetLoginPassword("xxxx");
int err;
byte [] byte_content = new byte[140];

Submit submit = null;
SubmitResp submitresp=null;

Unbind term=null;
BindResp resp=null;
UnbindResp Unresp=null;
so=new Socket("xxx.xxx.xxx.xxx",8801);
out=new DataOutputStream(so.getOutputStream());
input = new DataInputStream(so.getInputStream());
err=command.write(out);//发送bind
if(err!=0)
{
System.out.println("err"+err);
}
tmp=sgip.read(input);//接收sgip消息
if(sgip.getCommandID()==SGIP_Command.ID_SGIP_BIND_RESP)
{
System.out.println("登录");
resp=(BindResp)tmp;//强制转换为bindresp
resp.readbody();//对消息进行解包
System.out.println(tmp.getSeqno_1());

System.out.println(tmp.getSeqno_2());
System.out.println(tmp.getSeqno_3());
System.out.println(resp.GetResult());
}


for(i=0;i<140;i++)
{
byte_content[i] = 51;
i++;
byte_content[i] = 51;
i++;
byte_content[i] = 52;
i++;

byte_content[i] = 53;
i++;
byte_content[i] = 54;
i++;

byte_content[i] = 55;
i++;
byte_content[i] = 56;
i++;
byte_content[i] = 57;
i++;

byte_content[i] = 58;
i++;
byte_content[i] = 59;
}

submit = new Submit(xxxxxxxx);//节点号
String content = "短信测试内容";
byte[] MessageContent = content.getBytes("GB2312");

Date nowtime = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("MMddHHmmss");
String tmpTime = dateFormat.format(nowtime);

submit.setReportFlag(1);
submit.setSPNumber("xxxxxxx");//接入号
submit.setChargeNumber("000000000000000000000");
submit.setUserNumber("86xxxxxxxx");//手机号不过一定要加86
submit.setServiceType("xxxxxx");//服务号
submit.setCorpId("xxxxx");//企业号
submit.setFeeType(3);
submit.setFeeValue("0");
submit.setGivenValue("0");
submit.setAgentFlag(0);
submit.setMOrelatetoMTFlag(0);
submit.setExpireTime(tmpTime);
submit.setScheduleTime(tmpTime);//不同的短信接口对时间的要求也不一样子。这里一定要
submit.setPriority(6);
submit.setReportFlag(1);
submit.setTP_pid(0);
submit.setTP_udhi(0);
submit.setMessageType(0);
submit.setBinContent(10, byte_content);

submit.setContent(15, "大家快跑");


int len = submit.write(out);//发送submit
System.out.println("len:"+len);
tmp=sgip.read(input);
if(tmp.getCommandID()==SGIP_Command.ID_SGIP_SUBMIT_RESP)
{
System.out.println("发送短消息");
submitresp=(SubmitResp)tmp;//强制转换
submitresp.readbody();//解包
System.out.println(tmp.getSeqno_1());
System.out.println(tmp.getSeqno_2());
System.out.println(tmp.getSeqno_3());
System.out.println(submitresp.getResult());
}

term=new Unbind(3000099050l);
term.write(out);//发送unbind
tmp=sgip.read(input);
if(sgip.getCommandID()==SGIP_Command.ID_SGIP_UNBIND_RESP)
{
System.out.println("解除锁定");
Unresp=(UnbindResp)tmp;
System.out.println(tmp.getSeqno_1());
System.out.println(tmp.getSeqno_2());
System.out.println(tmp.getSeqno_3());
}
out.close();
so.close();
}catch (SGIP_Exception e){
e.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
} finally {

}

}
//接收短信
public static void recvLetter() {
Socket so=null;
OutputStream output=null;
InputStream input=null;
SGIP_Command sgip = null;
Bind bind = null;

try {
sgip =new SGIP_Command();
SGIP_Command tmp=null;
Deliver deliver=null;
DeliverResp deliverresp = null;

so=new Socket("xxx.xxx.xxx.xxx",8801);
input=so.getInputStream();
output=so.getOutputStream();
bind = new Bind(xxxxxx);
bind.SetLoginType(1);
bind.SetLoginName("xxxxxxx");
bind.SetLoginPassword("xxxxxxx");
System.out.println("正在登录中......");
int err=bind.write(output);//发送bind
if(err!=0)
{
System.out.println("err"+err);
}

tmp = sgip.read(input);
if(tmp.getCommandID() == SGIP_Command.ID_SGIP_BIND_RESP)
{
BindResp resp = (BindResp) tmp;
resp.readbody();
if(resp.GetResult() == 0)
{
System.out.println("登录成功!!");
}
else
{
System.out.println("登录失败");
}

}
System.out.println("正在接收中....");
while(true)
{
tmp = sgip.read(input);
if(tmp.getCommandID() == SGIP_Command.ID_SGIP_DELIVER)
{
System.out.println("接收到信息");
deliver=(Deliver)tmp;//强制转换
deliver.readbody();//解包
System.out.println(deliver.getTotalLength());
System.out.println(deliver.getCommandID());
System.out.println(deliver.getSeqno_1());
System.out.println(deliver.getSeqno_2());
System.out.println(deliver.getSeqno_3());
System.out.println(deliver.getUserNumber());
System.out.println(deliver.getSPNumber());
System.out.println(deliver.getTP_pid());
System.out.println(deliver.getTP_udhi());
System.out.println(deliver.getMessageCoding());
System.out.println(deliver.getMessageLength());
System.out.println( new String(deliver.getMessageByte(),"UnicodeBigUnmarked"));

deliverresp = new DeliverResp(3000099050l,0);
deliverresp.SetResult(0);
deliverresp.write(output);
break;
}
}

Unbind term=new Unbind(xxxxxxx);//节点号
term.write(output);//发送unbind
tmp=sgip.read(input);
if(sgip.getCommandID()==SGIP_Command.ID_SGIP_UNBIND_RESP)
{
System.out.println("解除锁定");
}
output.close();
so.close();

} catch (Exception e) {
System.out.println(e.toString());
} finally {

}

}



public static void main(String[] args) {
// TODO Auto-generated method stub
SMSHelper.recvLetter();
}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值