xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
首先,你要选择一台移动或者联通的短信服务器做你们的发送短信接口.这是最关键的一步,也是最底层的,当然这是需要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;
}
当然要根据不同的参数来判断不同的错误和正确的发送.就谈这么多了,如果大家有什么不明的,可以和我联系.
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器