📄 app_clientthread.java
字号:
package telproject;
import java.net.*;
class App_ClientThread extends Pub_MyRunnable {
private Queue_Socket socket_queue = null;
private int iThreadID;
public App_ClientThread(int n, Queue_Socket queue) {
iThreadID = n;
socket_queue = queue;
}
public int getByteLen(String s) {
if (s == null) {
return 0;
} else {
byte b[] = s.getBytes();
return b.length;
}
}
public void PharseSocket(Pub_Connector mts) {
try {
if (mts == null)
return;
int iLoop = 0;
for (iLoop = 0; iLoop <= 50; iLoop++) {// 原来为600
int iLen = mts.available();
if (iLen > 0)
break;
else if (iLen <= 0) {
sleep(25);
}
if (iLoop == 50) {
mts.close();
return;
}
}
System.out.println("--[处理模块" + (iThreadID + 1) + "]开始时间:"
+ new java.util.Date());
byte[] b = mts.read(10);
String sHead = new String(b);
int iLen = Integer.parseInt(sHead.substring(0, 4));
String sFunno = sHead.substring(4, 6);
String sFlowID = sHead.substring(6, 10);
System.out.println("--[处理模块" + (iThreadID + 1) + "]收到话机IP="
+ mts.getIPAddr() + "的请求!");
byte[] bBody = mts.read(iLen - 10);
String sBody = null;
if (bBody != null)
sBody = new String(bBody);
process(mts, sFunno, sFlowID, sBody);
System.out.println("--[处理模块" + (iThreadID + 1) + "]结束时间:"
+ new java.util.Date());
} catch (Exception e) {
System.out.println(e.toString());
}
}
//end() methond location
public void ReadSocket(Pub_Connector mts) {
try {
if (mts == null)
return;
int iLoop = 0;
for (iLoop = 0; iLoop <= 50; iLoop++) {// 原来为600
int iLen = mts.available();
if (iLen > 0)
break;
else if (iLen < 0) {
sleep(25);
}
if (iLoop == 50) {// 原来为600
System.out.println("--[处理模块" + (iThreadID + 1)
+ "]接收Socket数据流为空!");
mts.close();
return;
}
}
byte[] b = mts.read(10);
String sHead = new String(b);
int iLen = Integer.parseInt(sHead.substring(0, 4));
String sFunno = sHead.substring(4, 6);
String sFlowID = sHead.substring(6, 10);
if (sFunno.equals("02"))
System.out.println("--[处理模块" + (iThreadID + 1) + "]收到留言请求IP="
+ mts.getIPAddr() + "的请求!请求号=" + sFunno);
else
System.out.println("--[处理模块" + (iThreadID + 1) + "]收到非留言请求IP="
+ mts.getIPAddr() + "的请求!请求号=" + sFunno);
byte[] bBody = mts.read(iLen - 10);
String sBody = null;
if (bBody != null)
sBody = new String(bBody);
process(mts, sFunno, sFlowID, sBody);
} catch (Exception e) {
System.out.println(e.toString());
}
}
public String getStatement(String fromUrl) {
int i;
String msg = null;
boolean ifound = false;
if (fromUrl.length() > 10 || fromUrl.equalsIgnoreCase(GLOBALSIGNAL[0])
|| fromUrl.equals(GLOBALSIGNAL[2])) {
return "OK";
} else {
for (i = 1; i < GLOBALSIGNAL.length; i++) {
if (fromUrl.equalsIgnoreCase(GLOBALSIGNAL[i])) {
msg = GLOBALSIGNALMSG[i];
ifound = true;
break;
}
}
}
if (ifound == true)
return GLOBALSIGNALMSG[i];
else {
return "--[处理模块" + (iThreadID + 1) + "]其他异常,数据包流失--";
}
}
public void process(Pub_Connector mts, String func_no, String seq_no,
String strBody) {
String state = "";// 从家校通返回信息的状态
// 从话提交的字符串中抽出所需信息
String System_time = Pub_Tools.getDate() + "%20" + Pub_Tools.getTime(); // 系统时间
String respStr = null; // --返加给话机的信息
String sNoteNum = null;
// 对输入的字符串按类别进行操作
// ---对学生卡登陆进行处理---01
if (func_no.equals(STDT_CARD_LOGIN)) {
String Device_msisdn = strBody.substring(0, 15);// 分解上行包
String Device_id = strBody.substring(15, 33);
String card_id = strBody.substring(33, 51);
String student_id = strBody.substring(51, 69);
String request_time = strBody.substring(69, 83);
Device_msisdn = Device_msisdn.trim();
Device_id = Device_id.trim();
card_id = card_id.trim();
student_id = student_id.trim();
String time = request_time;// 2007-04-04 modify
String year = time.substring(0, 4);
String date = time.substring(4, 6);
String month = time.substring(6, 8);
String hour = time.substring(8, 10);
String min = time.substring(10, 12);
String sec = time.substring(12, 14);
String no = year + "-" + date + "-" + month + "%20" + hour + ":"
+ min + ":" + sec;// 2007-04-04 end
String toUrl = "httpReadFamily?func_no=" + func_no
+ "&device_msisdn=" + Device_msisdn + "&device_id="
+ Device_id + "&card_id=" + card_id
+ "&student_id=S0008000045&start_time=" + no;
String fromUrl = (new Http_ConServlet(toUrl)).getInfo(iThreadID);
String msg = "--[处理模块" + (iThreadID + 1) + "]卡登录请求,卡号=" + card_id
+ ",设备号=" + Device_msisdn + ",时间=" + Pub_Tools.getTime();
state = getStatement(fromUrl);
if (state.equals("OK"))
state = "成功";
else
state = "失败;详情: " + state;
msg = msg + ",状态: " + state;
System.out.println(msg);
new Log_WriteFile("\r\n" + Pub_Tools.getDate() + " "
+ Pub_Tools.getTime() + msg + no);
if (fromUrl.length() > 4)
sNoteNum = fromUrl.substring(fromUrl.length() - 4);
else
sNoteNum = "0000";
System_time = System_time.replaceAll("%20", " ");
String total = func_no + seq_no + fromUrl
+ Pub_Tools.get14TimeStamp();
String sLen = "";
for (sLen = String.valueOf(getByteLen(total) + 4); sLen.length() < 4; sLen = "0" + sLen);
respStr = sLen + total;
System.out.println("--[处理模块" + (iThreadID + 1) + "]返回卡登录请求,卡号="
+ card_id + ",返回数据=" + respStr);
} else
// ---对学生卡读取留言进行处理--02
if (func_no.equals(STDT_READ_MSG)) {
String Device_msisdn = strBody.substring(0, 15);
String Device_id = strBody.substring(15, 33);
String card_id = strBody.substring(33, 51);
String student_id = strBody.substring(51, 69);
String request_time = strBody.substring(69, 83);
Device_msisdn = Device_msisdn.trim();
Device_id = Device_id.trim();
card_id = card_id.trim();
student_id = student_id.trim();
String time = request_time;// 2007-04-04 modify
String year = time.substring(0, 4);
String date = time.substring(4, 6);
String month = time.substring(6, 8);
String hour = time.substring(8, 10);
String min = time.substring(10, 12);
String sec = time.substring(12, 14);
String no = year + "-" + date + "-" + month + "%20" + hour + ":"
+ min + ":" + sec;// 2007-04-04 end
String msg = "--[处理模块" + (iThreadID + 1) + "]取留言请求,卡号=" + card_id
+ ",设备号=" + Device_msisdn + ",时间=" + Pub_Tools.getTime();
String toUrl = "httpReadFamilyMsg?func_no=" + func_no
+ "&device_msisdn=" + Device_msisdn + "&device_id="
+ Device_id + "&card_id=" + card_id
+ "&student_id=S0008000045&start_time=" + no;
int iCount = 0;
String fromUrl = "";
String total = "";
String sTemp = "";
String sTempLen = "";
do {
fromUrl = (new Http_ConServlet(toUrl)).getInfo(iThreadID);
state = getStatement(fromUrl);
if (fromUrl.substring(0, 4).equals("0000")) {
if (iCount == 0)
state = "失败;详情:系统没有留言!";
break;
}
sTemp = fromUrl.substring(4, fromUrl.length());
byte b[] = sTemp.getBytes();
for (sTempLen = String.valueOf(b.length); sTempLen.length() < 4; sTempLen = "0" + sTempLen);
total = total + sTempLen + sTemp;
iCount++;
} while (!fromUrl.substring(0, 4).equals("0001") && iCount <= 100);
total = func_no + seq_no + total;
String sLen;
for (sLen = String.valueOf(getByteLen(total) + 4); sLen.length() < 4; sLen = "0" + sLen);
respStr = sLen + total;
new Log_WriteFile("\r\n" + Pub_Tools.getDate() + " "
+ Pub_Tools.getTime() + respStr);
System.out.println("--[处理模块" + (iThreadID + 1) + "]返回取留言请求,卡号="
+ card_id + ",返回数据=" + respStr + msg);
} else
// ---对通话话单进行处理---03
if (func_no.equals(CALL_BILLING)) {
String device_msisdn = strBody.substring(0, 15).trim(); // 公话手机号
String device_id = strBody.substring(15, 33).trim(); // 公话ID
String card_id = strBody.substring(33, 51).trim(); // 学生卡号
String student_id = strBody.substring(51, 69).trim(); // 学生ID
String Call_times = strBody.substring(69, 71).trim(); // 话单个数
String start_time = strBody.substring(71, 85).trim(); // 开始呼叫时间
String called_duration = strBody.substring(85, 91).trim(); // 通话时长
String other_party = strBody.substring(91, 115).trim(); // 被叫号码
// 显示信息
String msg = "--[处理模块" + (iThreadID + 1) + "]通话话单请求,卡号=" + card_id
+ ",设备号=" + device_msisdn + ",时间=" + Pub_Tools.getTime();
String toUrl = "httpReadFamilyCalled?func_no=" + func_no
+ "&Device_msisdn=" + device_msisdn + "&device_id="
+ device_id + "&card_id=" + card_id + "&student_id="
+ student_id + "&Call_times=" + Call_times + "&start_time="
+ start_time + "&called_duration=" + called_duration
+ "&other_party=" + other_party;
String fromUrl = new Http_ConServlet(toUrl).getInfo(iThreadID);
state = getStatement(fromUrl);
if (state.equals("OK")) {
state = "成功";
} else {
state = "失败;详情: " + state;
}
msg = msg + ",状态: " + state;
System.out.println(msg);
new Log_WriteFile("\r\n" + Pub_Tools.getDate() + " "
+ Pub_Tools.getTime() + msg);
String total = func_no + seq_no + fromUrl;
String sLen = String.valueOf(total.length() + 4);
while (sLen.length() < 4) {
sLen = "0" + sLen;
}
respStr = sLen + total;
System.out.println("--[处理模块" + (iThreadID + 1) + "]返回通话话单请求,卡号="
+ card_id + ",返回数据=" + respStr);
} else
// ---对学生签到记录进行处理---04
if (func_no.equals(STDT_SIGN_RECS)) {
String total = func_no + seq_no + "1";
String sLen = String.valueOf(total.length() + 4);
while (sLen.length() < 4) {
sLen = "0" + sLen;
}
respStr = sLen + total;
String machine_id = strBody.substring(0, 15).trim();
String card_id = strBody.substring(18, 36).trim(); // 学生卡号
String start_time = strBody.substring(54, 68).trim(); // 签到时间
String time = start_time;
String year = time.substring(0, 4);
String date = time.substring(4, 6);
String month = time.substring(6, 8);
String hour = time.substring(8, 10);
String min = time.substring(10, 12);
String sec = time.substring(12, 14);
String no = year + "-" + date + "-" + month + "%20" + hour + ":"
+ min + ":" + sec;
// 显示信息
String msg = "--[处理模块" + (iThreadID + 1) + "]学生签到请求,卡号=" + card_id
+ ",时间=" + no + ",设备ID=" + machine_id;
String toUrl = "httpReadCard?SchoolID=0008&SchoolPass=8888&MsgType=0&CommID=1&ReaderID=1&Msg="
+ card_id + "&DateTime=" + no;
String fromUrl = new Http_ConServlet(toUrl).getInfo(iThreadID);
// 对从servlet反回的信息分类处理
String result = null;
state = getStatement(fromUrl);
if (state.equals("OK")) {
result = "成功";
total = func_no + seq_no + "1";
} else {
result = "失败;详情: " + state;
total = func_no + seq_no + "0";
}
msg = msg + ",状态: " + result;
new Log_WriteFile("\r\n" + Pub_Tools.getDate() + " "
+ Pub_Tools.getTime() + msg + "当前时间" + no);
System.out.println(msg);
System.out.println("--[处理模块" + (iThreadID + 1) + "]返回学生签到请求,卡号="
+ card_id + ",返回数据=" + respStr + "当前时间" + no);
} else
// ---对网络连接状态进行处理--05
if (func_no.equals(CONNECT_STATUS)) {
// String msg = "--[线路检测]线路连接正常";
respStr = "0010" + func_no + seq_no;
new Log_WriteFile("\r\n" + Pub_Tools.getDate() + " "
+ Pub_Tools.getTime() + respStr);
} else
// ---对学号登陆进行处理---07
if (func_no.equals(STDT_NO_LOGIN)) {
String Device_id = strBody.substring(0, 18).trim(); // 公话ID
String student_id = strBody.substring(18, 36).trim(); // 学生ID
String request_time = strBody.substring(36, 50).trim(); // 请求时间
// 显示信息
String msg = "[学号登陆] 设备号: " + Device_id + " 时间: "
+ Pub_Tools.getTime();
System.out.println(msg);
new Log_WriteFile("\r\n" + Pub_Tools.getDate() + " "
+ Pub_Tools.getTime() + msg);
String toUrl = "func_no=" + func_no + "&device_id=" + Device_id
+ "&student_id=" + student_id + "&request_time="
+ System_time;
String fromUrl = new Http_ConServlet(toUrl).getInfo(iThreadID);
String total = func_no + seq_no + fromUrl;
String sLen = String.valueOf(total.length() + 4);
while (sLen.length() < 4) {
sLen = "0" + sLen;
}
respStr = sLen + total;
System.out.println("--[处理模块" + (iThreadID + 1) + "]返回学号登陆请求,返回数据="
+ respStr);
new Log_WriteFile("\r\n" + Pub_Tools.getDate() + " "
+ Pub_Tools.getTime() + msg);
}
WriteAndCloseSocket(mts, respStr);
new Log_WriteFile("\r\n" + Pub_Tools.getDate() + " "
+ Pub_Tools.getTime() + respStr);
System.out.println("--[处理模块" + (iThreadID + 1)
+ "]请求处理完毕,关闭当前Socket成功!");
}
public void WriteAndCloseSocket(Pub_Connector mts, String msg) {
boolean closeSocket = true;
String fun_no = null;
int noteLen = 0;
new Log_WriteFile("\r\n[写入Socket的信息][" + msg + "]");
mts.write(msg.getBytes());
try {
fun_no = msg.substring(4, 6);
int iLen = msg.length();
if (fun_no.equals("01"))
noteLen = Integer.parseInt(msg.substring(iLen - 18, iLen - 14));
} catch (Exception e) {
}
if (fun_no.equals(STDT_CARD_LOGIN) && noteLen > 0) {
closeSocket = false;
ReadSocket(mts);
}
if (closeSocket)
mts.close();
}
public void run() {
System.out.println("--[处理模块" + (iThreadID + 1) + "]线程已启动!");
bStop = false;
Object o;
while (!bStop) {
resetIdle();
try {
o = socket_queue.pop();
if (o == null) {
sleep(16);
} else
PharseSocket(new Pub_Connector((Socket) o));
} catch (Exception e) {
}
}
}
protected void end() {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -