首先,你要選擇一臺移動或者聯(lián)通的短信服務(wù)器做你們的發(fā)送短信接口.這是最關(guān)鍵的一步,也是最底層的,
當(dāng)然這是需要much money的,呵呵.沒辦法!現(xiàn)實了點....
然后你就是在連接接口的服務(wù)器做技術(shù)了.用JAVA 的 SOCKET 來監(jiān)聽客戶端的SOCKET,當(dāng)然這是需要一定的
難度,和普通是有很多的區(qū)別,例如每秒鐘可以同時接受3000條SOCKET... ...,要進行客戶端的認(rèn)證.要進行數(shù)據(jù)
流轉(zhuǎn)輸?shù)募用?.. ...
最后就是來處理客戶端的發(fā)送SOCKET了,其實他們傳輸都是字節(jié)Byte...
public class Client


{
//構(gòu)造函數(shù)
public Client()

{
connectStatus = false;
loginStatus = false;
default_ip = "";
default_port = 0;
default_user = "";
default_password = "";
connection = null;
input = null;
out = null;
binput = null;
}

//連接函數(shù)
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;
}

//登錄函數(shù)

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;
}

//發(fā)送函數(shù)

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;
}

}


posted on 2006-02-17 10:06
kelven 閱讀(608)
評論(0) 編輯 收藏 所屬分類:
java