📄 smsserver.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 + -