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

📄 smsserver.java

📁 这是联通群发短信的JAVA源码。 主要用于与网关通信
💻 JAVA
字号:
package com.bonc.jlcc;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import org.apache.log4j.Logger;

public class SmsServer extends ServerSocket implements Runnable {
	private static final Logger logger = Logger.getLogger(SmsServer.class);

	private Socket request = null;

	private BufferedReader in;

	private PrintWriter out;

	private static ServerSocket server = null;

	private static boolean stopSend = false;

	private SmsSender sender = new SmsSender();

	public SmsServer() throws IOException {
		int port = 1234;
		try {
			port = Integer.parseInt(SmsConfig.getVaue("receive.port", "1234"));
			server = new ServerSocket(port);
		} catch (NumberFormatException e) {
			logger.error("Construct happened NumberFormatException:\n" + e);
			logger.error("Now use default port:" + port);
		} catch (Exception e) {
			logger.error("Construct happened UnknowException:\n" + e);
		}
		Runtime.getRuntime().addShutdownHook(new Thread() {
			public void run() {
				logger.info("enter hook.quit...");
				try {
					if (in != null)
						in.close();
					if (out != null)
						out.close();
					if (server != null)
						server.close();
				} catch (IOException ex) {
					logger.error("When close server happened IOExceptio:" + ex);
				}
			}
		});
	}

	public void run() {
		logger.info("starting..." + new Date());
		while (true) {
			try {
				logger.info("Hello! Now time is:" + new Date());
				request = server.accept();
				logger.info("Already accept request:" + request);
				in = new BufferedReader(new InputStreamReader(request
						.getInputStream()));
				out = new PrintWriter(new OutputStreamWriter(request
						.getOutputStream()), true);
				if (in.ready()) {
					String line = in.readLine().trim();
					logger.info("first request info:" + line);
					if (line.startsWith("sms-begin") && !stopSend) {
						out.println("This is sms server.I'm ready to work...");
						String[] info = line.split(":");
						Collection<SmsMessage> msgs;
						switch (info.length) {
						case 2:
							msgs = unPackSms(info[1].trim(), "\t");
							break;
						case 3:
							msgs = unPackSms(info[1].trim(), info[2].trim());
							break;
						default:
							msgs = unPackSms("sms-end", "\t");
							break;
						}
						if (!msgs.isEmpty()) {
							logger.debug("begin send...");
							int smsCount = sender.sendMsg(msgs);
							if (smsCount > 0) {
								logger.info("This time send sms:" + smsCount);
								out.println("ok:" + getSendedIDs());
							} else {
								logger.info("There are not send sms:"
										+ smsCount);
								out.println("no:" + smsCount);
							}
						}
					} else if (line.startsWith("sms-stop")) {
						stopSend = true;
						logger.info("Now sms server stop sending message.");
					} else if (line.startsWith("sms-start")) {
						stopSend = false;
						logger.info("Now sms server start sending message.");
					}
				}
				in.close();
				out.close();
				request.close();
			} catch (IOException e) {
				logger.error("main loop happened IOException:\n" + e);
			} catch (Exception e) {
				logger.error("main loop happened Unknow Exception:\n" + e);
			}
		}
	}

	private Collection<SmsMessage> unPackSms(String smsEndline,
			String smsDelimitor) {
		Collection<SmsMessage> msgs = new ArrayList<SmsMessage>();
		try {
			String line;
			while (!smsEndline.equals(line = in.readLine().trim())) {
				logger.debug("current line info:" + line);
				if ("".equals(line))
					continue;
				String[] info = line.split(smsDelimitor);
				assert info.length == 3 : "sms's length is wrong.";
				if (info.length < 3) {
					logger.info("SMS's length is too short.");
				} else {
					String users = info[0].trim();
					String content = info[1].trim();
					String msgId = info[2].trim();
					logger.debug(users + ":" + content + ":" + msgId);
					users = formatUsers(users);
					SmsMessage msg = new SmsMessage();
					msg.setSendingUsers(users);
					msg.setSendingContent(content);
					msg.setMsgId(msgId);
					msgs.add(msg);
				}
			}
		} catch (IOException e) {
			logger.error("When sending happened IOExceptin:" + e);
		} catch (Exception e) {
			logger.error("When sending happened UnknowExceptin:\n" + e);
		}
		return msgs;
	}

	private String getSendedIDs() {
		String okIDs = "";
		while (sender.getSendedId() != null) {
			long id = sender.getSendedId().longValue();
			sender.delSendedId(id);
			okIDs = okIDs.concat(",").concat(String.valueOf(id));
		}
		if (okIDs.length() > 1) {
			logger.debug("Sent sms' IDs:" + okIDs.substring(1));
			PrintWriter out = null;
			try {
				out = new PrintWriter(new OutputStreamWriter(request
						.getOutputStream()), true);
			} catch (IOException e) {
				e.printStackTrace();
			}
			out.println("ok:" + okIDs.substring(1));
			return okIDs.substring(1);
		}
		return null;
	}

	private String formatUsers(String users) {
		String[] user = users.split(",");
		if (user.length == 0)
			return null;
		String fomattedUsers = "";
		String person;
		for (int u = 0; u < user.length; u++) {
			person = user[u].trim();
			if (!person.startsWith("861")) {
				fomattedUsers = fomattedUsers.concat(",86").concat(person);
			}else{
				fomattedUsers=fomattedUsers.concat(",").concat(person);
			}
		}
		return fomattedUsers.substring(1);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			Thread serverT = new Thread(new SmsServer());
			serverT.start();
		} catch (IOException e) {
			logger.error("IOExcetiion in main:" + e);
		} catch (Exception e) {
			logger.error("Exception in main:" + e);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -