首先,你要选择一台移动或者联通的短信服务器做你们的发送短信接口.这是最关键的一步,也是最底层的,当然这是需要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;
}
当然要根据不同的参数来判断不同的错误和正确的发送.就谈这么多了,如果大家有什么不明的,可以和我联系.
闽公网安备 35060202000074号