`
Java_Fan
  • 浏览: 81624 次
  • 性别: Icon_minigender_1
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

通过 java sockt 通信方式调用第三方短信接口发送短信

 
阅读更多

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

分享到:
评论

相关推荐

    java调用移动飞信接口实现免费发送短信

    为了方便开发者,移动飞信提供了对外的API接口,使得第三方应用能够集成其功能,比如发送短信。 在Java中,调用接口通常采用HTTP请求或Socket通信的方式。针对移动飞信接口,我们可能需要使用HTTP请求,因为HTTP...

    JAVA短信验证源码DEMO

    5. **短信服务提供商API**:大多数情况下,发送短信并非直接通过运营商,而是通过第三方短信服务提供商,这些提供商提供了API供开发者调用。在DEMO中,`MessageSendClient.java`和`MessageSender.java`可能封装了对...

    用JAVA写的短信发送程序

    在Java中,发送短信通常需要借助第三方库,如SMPP(Short Message Peer-to-Peer)协议库。这些库提供了与短信网关交互的API,使得Java程序能够发送和接收短信。例如,`derby.jar`可能包含的是Apache Derby数据库的...

    java socket 经典教程

    Java的`java.sql.DriverManager`就提供了连接池的支持,但需要第三方库如Apache Commons Pool来实现Socket连接池。 9. **SSL/TLS安全通信** - Java提供`SSLSocket`和`SSLServerSocket`类支持安全的HTTPS通信,利用...

    java socket连接池

    在Java中,可以使用第三方库如Apache Commons Pool或者HikariCP来实现Socket连接池。这些库提供了完善的连接池管理功能,包括连接的创建、分配、回收以及超时、空闲检测等策略。 实现Socket连接池的步骤大致如下: ...

    Android应用源码安卓与PC的Socket通信项目java版_串口通讯.zip

    在PC端,你可以使用Java的第三方库,如Rxtx或JSSC,来实现串口操作。这些库提供了打开、关闭串口,设置波特率、数据位、停止位等参数,以及读写数据的方法。 在Android端实现串口通讯相对较复杂,因为Android原生不...

    java c++ 通信之间的乱码解决方法

    在C++中,通常需要手动处理编码转换,可能需要用到第三方库如iconv等。 总之,Java和C++通过Socket通信时,要确保双方对字符编码的一致性,避免出现乱码现象。在设计系统时,最好能统一编码标准,如都使用UTF-8,以...

    java实现发送短信

    1. **接口选择**:市面上有许多提供短信服务的第三方平台,如阿里云、腾讯云等,它们通常会提供API接口供开发者调用。这些接口通常包括注册、认证、发送短信、接收状态报告等功能。 2. **HTTP请求**:Java中可以...

    ice和java socket网络传输的对比

    4. **序列化和反序列化**:Java Socket不自带序列化机制,开发者需要手动实现或者使用第三方库如Protocol Buffers(protobuf)。 5. **线程管理**:Java Socket的异步处理需要开发者自行管理线程,增加了编程复杂性...

    HTTP-and-Socket.rar_http socket_java socket http_socket_socket

    1. **Java HTTP客户端**:Java内置的HttpURLConnection或第三方库如Apache HttpClient可以用来发送HTTP请求和处理响应。 2. **Java Socket编程**:使用java.net.Socket和ServerSocket类,可以构建TCP Socket通信。...

    android+pc socket通信

    综上所述,Android与PC之间的Socket通信涉及TCP协议的理解、Socket编程的基本步骤、异常处理、权限管理以及可能的第三方库使用。开发者需要对这些知识点有深入的了解和实践,才能实现稳定、高效的网络通信。

    java和C++通信结构体发送

    - **C++的数据序列化**:C++没有内置的序列化机制,但可以使用第三方库如Boost.Serialization或自定义方式实现。 3. **结构体的序列化与转换**: - **结构体转换**:Java和C++对结构体的表示和存储方式不同,因此...

    JAVA调用zpl条码打印机打印实现中文打印。

    Java在调用ZPL打印机时,可以使用Socket通信或者通过第三方库如`java.net.Socket`类来实现网络连接。以下是一个简单的步骤概述: 1. 创建Socket连接:使用`Socket`类的`connect()`方法连接到打印机的IP地址和端口号...

    JAVA程序与PLC之间的通信

    3. **编写通信代码**:使用Java的网络编程API或第三方库,实现数据的发送和接收。 4. **错误处理和异常恢复**:在编程时要考虑到网络中断、设备故障等异常情况,确保通信的稳定性和可靠性。 5. **测试与调试**:在...

    http远程接口调用-httpClient+跳过SSL证书校验

    在IT行业中,网络通信是应用程序之间交互的重要方式。当我们需要从远程服务器获取数据或执行操作时,HTTP(超文本传输协议)是一种常见的选择。在某些情况下,为了提高安全性,服务器可能会使用HTTPS,这是一种通过...

    Android socket sdk开发

    由于Android主线程不允许进行长时间的网络操作,因此通常需要在后台线程(如AsyncTask或IntentService)中执行Socket通信。 8. **SDK设计**: 开发Socket SDK时,应考虑到易用性、可扩展性和错误处理。设计良好的...

    JAVA调用zpl条码打印机打印中文打印及网络打印实例

    这可能需要对ZPL语法有更深入的理解,并且可能需要使用更高级的JAVA库,如`java.awt.print`包中的类,或者第三方的打印库。 总的来说,通过JAVA调用ZPL实现中文打印和网络打印,不仅需要掌握JAVA的网络编程,还需要...

    cocos2d-x+socket

    例如,我们可以使用C++的Socket API或者第三方库如Poco,它们提供了封装好的Socket操作接口,使得在cocos2d-x项目中使用Socket变得更加便捷。同时,cocos2d-x的网络模块(如`Network`类)虽然主要用于HTTP请求,但也...

    java 通过modbus rtu协议,tcp 协议 通讯源码

    在Java中实现Modbus通信,通常会用到第三方库,例如JModbus、jSerialComm、RXTX等。这些库提供了对Modbus协议的抽象和封装,使得开发者可以方便地创建Modbus主站和从站应用。 3. **Modbus RTU** - **RTU模式**:...

    Z00433+Java+TCP+IP+Socket编程++原书第2版

    《Z00433+Java+TCP+IP+Socket编程++原书第2版》是一本深入探讨Java网络编程的书籍,由美国作者卡尔弗特(Calvert,K.L.)编写。这本书主要关注Java语言如何与网络通信协议,特别是TCP/IP协议栈以及Socket编程进行交互...

Global site tag (gtag.js) - Google Analytics