在项目发送短信方案中通过第三方提供的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通信问什么会因为空格而导致报错,但是这样的确解决了问题。短信可以成功发送.