/**
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the License). You may not use this file except in
* compliance with the License.
*
* Copyright 2006-2011 DataComo Communications Technology INC.
*
* This source file is a part of socketDemo project.
* date: Jan 5, 2011
*
*/
package socket;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import spApi.Bind;
import spApi.BindResp;
import spApi.Deliver;
import spApi.DeliverResp;
import spApi.Report;
import spApi.ReportResp;
import spApi.SGIP_Command;
import spApi.Unbind;
import spApi.UnbindResp;
import spApi.Userrpt;
import spApi.UserrptResp;
/**
* 使用sgip协议接收短信的多线程,socket服务
* @author geoffreyqh
* @date Jan 5, 2011 1:45:17 PM
* @update developer geoffreyqh
* @update date Jan 5, 2011 1:45:17 PM
* @version v1.0.0
*/
public class RecSMS extends Thread {
private Socket client;
static int num = 0;
public RecSMS(Socket c) {
this.client = c;
}
public void run() {
try {
InputStream input = client.getInputStream();
OutputStream output = client.getOutputStream();
SGIP_Command command = new SGIP_Command();
SGIP_Command tmpCMD = null;
Deliver deliver = null;
DeliverResp deliverresp = null;
Report report = null;
ReportResp reportresp = null;
Userrpt userrpt = null;
UserrptResp userrptresp = null;
Bind active = null;
Unbind term = null;
BindResp resp = null;
UnbindResp Unresp = null;
boolean loop = true;
while (loop) {
System.out.println("Run 方法 第" + num++ + "次执行");
tmpCMD = command.read(input);// 接收sgip消息
System.out.println("CommandID=========="
+ command.getCommandID());
switch (command.getCommandID()) {
case SGIP_Command.ID_SGIP_BIND: {
active = (Bind) tmpCMD;// 强制转换
int result = active.readbody();// 解包
System.out.println(tmpCMD.getTotalLength());
System.out.println(tmpCMD.getCommandID());
System.out.println(tmpCMD.getSeqno_1());
System.out.println(tmpCMD.getSeqno_2());
System.out.println(tmpCMD.getSeqno_3());
System.out.println(active.GetLoginType());
System.out.println(active.GetLoginName());
System.out.println(active.GetLoginPassword());
resp = new BindResp(tmpCMD.getMsgHead());
resp.SetResult(0);
resp.write(output);
break;
}
case SGIP_Command.ID_SGIP_UNBIND: {
term = (Unbind) tmpCMD;// 强制转换
// int result=term.readbody();
System.out.println(tmpCMD.getTotalLength());
System.out.println(tmpCMD.getCommandID());
System.out.println(tmpCMD.getSeqno_1());
System.out.println(tmpCMD.getSeqno_2());
System.out.println(tmpCMD.getSeqno_3());
System.out.println(term.GetFlag());
Unresp = new UnbindResp(tmpCMD.getMsgHead());// node id
// 3+AAAA+CP_id,
// AAAA是长途区号
Unresp.write(output);
loop = false;
break;
}
case SGIP_Command.ID_SGIP_DELIVER: {
deliver = (Deliver) tmpCMD;// 强制转换
deliver.readbody();// 解包
System.out.println("TotalLength:"
+ deliver.getTotalLength());
System.out.println("CommandID:" + deliver.getCommandID());
System.out.println("Seqno_1:" + deliver.getSeqno_1());
System.out.println("Seqno_2:" + deliver.getSeqno_2());
System.out.println("Seqno_3:" + deliver.getSeqno_3());
System.out.println("UserNumber:" + deliver.getUserNumber());
System.out.println("SPNumber:" + deliver.getSPNumber());
System.out.println("TP_pid:" + deliver.getTP_pid());
System.out.println("TP_udhi:" + deliver.getTP_udhi());
System.out.println("MessageCoding:"
+ deliver.getMessageCoding());
System.out.println("MessageLength:"
+ deliver.getMessageLength());
System.out.println("MessageContent:"
+ deliver.getMessageContent());
//获取的短信内容
String content = deliver.getMessageContent();
//手机号码
String telephoneNum = "";
if (deliver.getUserNumber().trim().startsWith("86")) {
telephoneNum = deliver
.getUserNumber()
.trim()
.substring(2,
deliver.getUserNumber().trim().length());
} else {
telephoneNum = deliver.getUserNumber().trim();
}
deliverresp = new DeliverResp(tmpCMD.getMsgHead());// result
deliverresp.SetResult(0);
deliverresp.write(output);
break;
}
case SGIP_Command.ID_SGIP_REPORT: {
report = (Report) tmpCMD;// 强制转换
report.readbody();// 解包
System.out.println(tmpCMD.getTotalLength());
System.out.println(tmpCMD.getCommandID());
System.out.println(tmpCMD.getSeqno_1());
System.out.println(tmpCMD.getSeqno_2());
System.out.println(tmpCMD.getSeqno_3());
System.out.println(report.getSeq_1());
System.out.println(report.getSeq_2());
System.out.println(report.getSeq_3());
System.out.println(report.getReportType());
System.out.println(report.getUserNumber());
System.out.println(report.getState());
System.out.println(report.getErrorCode());
reportresp = new ReportResp(tmpCMD.getMsgHead());// result
reportresp.SetResult(0);
reportresp.write(output);
break;
}
case SGIP_Command.ID_SGIP_USERRPT: {
userrpt = (Userrpt) tmpCMD;// 强制转换
userrpt.readbody(); // 解包
System.out.println(tmpCMD.getTotalLength());
System.out.println(tmpCMD.getCommandID());
System.out.println(tmpCMD.getSeqno_1());
System.out.println(tmpCMD.getSeqno_2());
System.out.println(tmpCMD.getSeqno_3());
System.out.println(userrpt.getSPNumber());
System.out.println(userrpt.getUserNumber());
System.out.println(userrpt.getUserCondition());
userrptresp = new UserrptResp(tmpCMD.getMsgHead());
userrptresp.SetResult(12);
userrptresp.write(output);
break;
}
}
if (!client.isBound() || !client.isConnected()) {
System.out.println("socket 断开连接==============");
break;
}
}
if (!client.isClosed()) {
client.close();
}
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.toString());
} finally {
try {
if (!client.isClosed()) {
client.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ServerSocket server = null;
try {
// 监听端口
server = new ServerSocket(9881);
System.out.println("ServerSocket 开始监听================");
} catch (IOException e) {
System.out.println("创建监听时出现异常==============");
e.printStackTrace();
}
int i = 0;
while (true) {
System.out.println("开始第 " + i++ + " 次接收短信======");
try {
RecSMS recv = new RecSMS(server.accept());
recv.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}