⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app_clientthread.java

📁 福建鑫诺话机客户端接受程序
💻 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 + -