package edu.sjtu.infosec; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import edu.sjtu.infosec.comm.EscapeUnescape; import edu.sjtu.infosec.email.service.EmailSendService; import edu.sjtu.infosec.email.service.impl.EmailSendServiceImpl; import edu.sjtu.infosec.sms.service.SmsService; import edu.sjtu.infosec.sms.service.impl.DaMeng.SmsServiceImpl; /** * 发短消息和邮件的服务启动类 * @author Wu Guojie * @date 2010-8-16 * @version 1.0 * 注意: * 一、发送格式为:发送方式|接收方|信息 * “发送方式”说明: * 1、“all”表示手机和邮箱共同发送 * 2、“email”表示只发邮件 * 3、“sms”表示只发短信 * “接收方”说明: * 1、只发短信,此处格式为:“手机1,手机2,...” * 2、只发邮件,此处格式为:“邮箱1,邮箱2,...” * 3、手机和邮箱共同发送,此处格式为:“手机1,手机2,...;邮箱1,邮箱2,...” * “信息”说明: * 此处为要发送的内容 * 二、发送端要求,以字符串形式进行发送,字符串格式如上发送格式说明,发送的文本需要通过EscapeUnescape类中的escape方法先进行编码,再发送,以解决中文乱码的问题 * 例如: * String say = "all|手机1,手机2,...;邮箱1,邮箱2,...|信息内容"; * say = EscapeUnescape.escape(toSay); * 同时,要求发送端要有两个Socket,一个用于发送消息,一个用于接收回复 */ public class MainServer { public static void main(String[] args) { System.out.println("Server开始启动..."); int port = 5432; ServerSocket s = null; //在端口5432上注册service try{ s = new ServerSocket(port); System.out.println("Server启动成功,服务链接端口为:" + port + "!\n=========================================="); }catch(IOException e){ e.printStackTrace(); System.out.println("Server启动失败!\n=========================================="); } while(true){ String clientSay = ""; try{ Socket s1 = s.accept(); Socket s2 = s.accept(); InputStream is1 = s1.getInputStream(); BufferedReader br1 = new BufferedReader(new InputStreamReader(is1)); String line = null; while((line=br1.readLine()) != null){ clientSay = clientSay + line; } br1.close(); s1.close(); clientSay = EscapeUnescape.unescape(clientSay); System.out.println("客户端说:" + clientSay); OutputStream s1out = s2.getOutputStream(); BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(s1out)); String[] cs = clientSay.split("\\|"); // System.out.println("长度:"+cs.length); if(cs!=null && cs.length>=3){ String server = "smtp.sina.com.cn"; String from = "sxq236@sina.com"; String password = "123456"; String socketAddr = "172.16.1.2"; Integer prot = 9110; String sf = cs[0]; String st = cs[1]; String mess = cs[2]; if(sf.equals("all")){//all if(st!=null && !st.trim().equals("")){ String[] sta = st.split(";"); if(sta!=null && sta.length==2){ String mta = sta[0]; String eta = sta[1]; if(mta!=null && !mta.trim().equals("")){ String[] mt = mta.split(","); String[] et = eta.split(","); if(mt!=null && mt.length>=1){ SmsService ss = new SmsServiceImpl(); if(mt.length == 1){ String mobile = mt[0]; try { String state = ss.sendMessToOneState(mobile, mess, socketAddr, prot); bw1.write(state); } catch (Exception e) { bw1.write("0"); // e.printStackTrace(); } }else{ try { ss.sendMessToMuch(mt, mess, socketAddr, prot); bw1.write("短信已发送,成功与否未知!"); } catch (Exception e) { bw1.write("短信发送出错,发送方式为:all.sms!"); // e.printStackTrace(); } } }else{ bw1.write("数据格式传输有误,发送方式为:all.sms!"); } if(et!=null && et.length>=1){ EmailSendService ess = new EmailSendServiceImpl(); bw1.write(";"); int i = 0; for(String emailTo : et){ if(i>0){ bw1.write(","); } boolean esss = ess.send(emailTo, mess, server, from, password); bw1.write(emailTo+":"+esss); i++; } }else{ bw1.write("数据格式传输有误,发送方式为:all.email!"); } }else{ bw1.write("数据格式传输有误,发送方式为:all!"); } }else{ bw1.write("数据格式传输有误,发送方式为:all!"); } }else{ bw1.write("数据格式传输有误,发送方式为:all!"); } }else if(sf.equals("email")){//email if(st!=null && !st.trim().equals("")){ String[] et = st.split(","); if(et!=null && et.length>=1){ EmailSendService ess = new EmailSendServiceImpl(); int i = 0; for(String emailTo : et){ if(i>0){ bw1.write(","); } boolean esss = ess.send(emailTo, mess, server, from, password); bw1.write(emailTo+":"+esss); i++; } }else{ bw1.write("数据格式传输有误,发送方式为:email!"); } }else{ bw1.write("数据格式传输有误,发送方式为:email!"); } }else if(sf.equals("sms")){//sms if(st!=null && !st.trim().equals("")){ String[] mt = st.split(","); if(mt!=null && mt.length>=1){ SmsService ss = new SmsServiceImpl(); if(mt.length == 1){ String mobile = mt[0]; try { String state = ss.sendMessToOneState(mobile, mess, socketAddr, prot); bw1.write(state); } catch (Exception e) { bw1.write("0"); // e.printStackTrace(); } }else{ try { ss.sendMessToMuch(mt, mess, socketAddr, prot); bw1.write("短信已发送,成功与否未知!"); } catch (Exception e) { bw1.write("短信发送出错,发送方式为:sms!"); // e.printStackTrace(); } } }else{ bw1.write("数据格式传输有误,发送方式为:sms!"); } }else{ bw1.write("数据格式传输有误,发送方式为:sms!"); } }else{ bw1.write("数据格式传输有误,发送方式为:sms!"); } }else{ bw1.write("数据不能为空,发送方式为:sms!"); } bw1.close(); s2.close(); }catch(IOException e){ e.printStackTrace(); } } } }