在项目发送短信方案中通过第三方提供的http链接方式来发送短信,采用了java sockt方案来解决,但是在应用过程中出现了一个奇怪的问题,加以记录:
代码如下:
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Date; /** * 发送短信 * @author Administrator * */ public class SendSms { public static void sendMessage(String phone,String message){ try { //message = message.replace(" ", "_"); URL url = new URL("http://219.130.221.131:8080/smsInterface/servlet/SendSms?tomobile="+phone+"&smscontent="+message+"&source=xzfwzx&xcode=300003"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setDoOutput(true); conn.setRequestMethod("POST"); String req = String.format("req=%s",URLEncoder.encode("gbk2312","utf-8")); OutputStream out = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(req); writer.flush(); //read response InputStreamReader isr = new InputStreamReader(conn.getInputStream(),"utf-8"); BufferedReader reader = new BufferedReader(isr); StringBuffer res = new StringBuffer(""); String flag = ""; while ((flag = reader.readLine()) != null) { res.append(flag); } out.close(); writer.close(); reader.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } public static void main(String[] args){ String phone = "13575745002"; String message = "你存在催办业务,业务编号:2013120011,受理时间:2013-12-06 15:36:40.0,现阶段剩余时间:1天,请抓紧时间办理!发送时间:"+new Date().toLocaleString(); SendSms.sendMessage(phone, message); } }
sokect报错:
Server returned HTTP response code: 505 for URL
原因:因为url中包含空格,
解决方案:替换掉短信息中的空格
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.Date; /** * 发送短信 * @author Administrator * */ public class SendSms { public static void sendMessage(String phone,String message){ try { message = message.replace(" ", "_"); URL url = new URL("http://219.130.221.131:8080/smsInterface/servlet/SendSms?tomobile="+phone+"&smscontent="+message+"&source=xzfwzx&xcode=300003"); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setDoOutput(true); conn.setRequestMethod("POST"); String req = String.format("req=%s",URLEncoder.encode("gbk2312","utf-8")); OutputStream out = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out)); writer.write(req); writer.flush(); //read response InputStreamReader isr = new InputStreamReader(conn.getInputStream(),"utf-8"); BufferedReader reader = new BufferedReader(isr); StringBuffer res = new StringBuffer(""); String flag = ""; while ((flag = reader.readLine()) != null) { res.append(flag); } out.close(); writer.close(); reader.close(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } public static void main(String[] args){ String phone = "13575745002"; String message = "你存在催办业务,业务编号:2013120011,受理时间:2013-12-06 15:36:40.0,现阶段剩余时间:1天,请抓紧时间办理!发送时间:"+new Date().toLocaleString(); SendSms.sendMessage(phone, message); } }
如此,问题解决了。
但是还是不知道java sockt通信问什么会因为空格而导致报错,但是这样的确解决了问题。短信可以成功发送.