服务器端发送推送数据
2011年12月26日
由于网络各种原因,直到今天才吧服务端推送消息做好。。
获取的消息如图,在用户不登陆客户端的情况下仍然可以接收到google服务器发送的消息。当然最重要的还是用户在第一次登陆客户端的时 候记录了用户的rid
package com.lxl.C2DM;
import java.util.Map;
import java.util.TreeMap;
import com.lxc.C2DM.http.URLPost;
public class GetAuth {
/**
* @param args
*/
public static void main(String[] args) {
//这个rid是上一篇中获取的
String rid = "APA91bFB6pnMraIPctzydZ7s6_FlWOP77SYhid999V2Q3w72wNs_bDFflXtNtomxdYjCaq5WGKfRITCs7QpbB8ToRmTykBy8Z-G1L70PxC77VpuNNxw8GzpnvU1yKwu_Xi9D_JsIMqSssP9Pk7UJAkkwQfzvBeV1Jw";
String auth = getAUTH();
if(auth == null){
System.out.println("get auth fail!!");
return;
}
Map message = new TreeMap();
message.put("registration_id", rid); //识别手机的ID
message.put("collapse_key", "1"); //消息的类型,同一类型消息只接收最后一条
message.put("data.sender", "shineflag"); //消息以键值对形式出现,可有多个
message.put("data.coins", "1000");
postMessage(auth, message);
}
/**
* 获取验证头,每次获取都是不同的,但我们只要任一个就行了
* @return 验证头(失败为空) 获取权限
*/
public static String getAUTH(){
String url = "https://www.google.com/accounts/ClientLogin";//获取Auth的URL
Map params = new TreeMap();
params.put("accountType","HOSTED_OR_GOOGLE");
params.put("Email","kb47161714@gmail.com");
params.put("Passwd","xl4716171");
params.put("service","ac2dm");
params.put("source","bupt-c2dmdemo-1.0");
String result = URLPost.PostURL(url, params,20*1000);
String [] results = result.split("=");
if(results == null || results.length message){
String url = "https://android.apis.google.com/c2dm/send";//发送推送消息的URL(固定的)
Map header = new TreeMap();
header.put("Authorization","GoogleLogin auth="+auth); //推送消息的证证头
String result = URLPost.PostURL(url, message, header, 20*1000);
return result;
}
}
package com.lxl.C2DM.http;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
/**
* 发送http请求的 工具类
* @author Shineflag
*
*/
public class URLPost {
/**
* 发送http请求
* @param url 请求的地址
* @param params 请求的参数
* @param header htttp头
* @param timeout 超时时间
* @return
*/
public static String PostURL(String url,
Map params, Map header,int timeout) {
String result = null;
HttpClient client = null;
HttpResponse response = null;
HttpPost postRequest = null;
HttpParams httpParams = new BasicHttpParams(); // 创建HttpParams以用来设置HTTP参数(这一部分不是必需的)
HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000); // 设置连接超时
HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000); // 设置Socket超时
HttpConnectionParams.setSocketBufferSize(httpParams, 8 * 1024); // Socket数据缓存默认8K
HttpConnectionParams.setTcpNoDelay(httpParams, false);
HttpConnectionParams.setStaleCheckingEnabled(httpParams, false);
HttpClientParams.setRedirecting(httpParams, false);
client = new DefaultHttpClient(httpParams);
try {
// 根据PHP情况设置超时
client.getParams().setParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, timeout);
client.getParams().setParameter(HttpConnectionParams.SO_TIMEOUT,
timeout);
List postParams = getpostParams(params);
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
postParams, HTTP.UTF_8);
postRequest = new HttpPost(url);
setHeader(postRequest, header);
postRequest.setEntity(formEntity);
response = client.execute(postRequest);
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
result = EntityUtils.toString(response.getEntity());
System.out.println("result = "+result);
}else{
System.out.println("responseCode ="+responseCode);
}
} catch (MalformedURLException e) {
// 抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串
} catch (ProtocolException e) {
// 协议故障
} catch (ConnectTimeoutException e) {
} catch (IOException e) {
} finally {
}
return result;
}
/**
* 发送http请求
* @param url 请求的地址
* @param params 请求的参数
* @param timeout 超时时间
* @return
*/
public static String PostURL(String url,
Map params, int timeout) {
String result = null;
HttpClient client = null;
HttpResponse response = null;
HttpPost postRequest = null;
HttpParams httpParams = new BasicHttpParams(); // 创建HttpParams以用来设置HTTP参数(这一部分不是必需的)
HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000); // 设置连接超时
HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000); // 设置Socket超时
HttpConnectionParams.setSocketBufferSize(httpParams, 8 * 1024); // Socket数据缓存默认8K
HttpConnectionParams.setTcpNoDelay(httpParams, false);
HttpConnectionParams.setStaleCheckingEnabled(httpParams, false);
HttpClientParams.setRedirecting(httpParams, false);
client = new DefaultHttpClient(httpParams);
try {
// 根据PHP情况设置超时
client.getParams().setParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, timeout);
client.getParams().setParameter(HttpConnectionParams.SO_TIMEOUT,
timeout);
List postParams = getpostParams(params);
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
postParams, HTTP.UTF_8);
postRequest = new HttpPost(url);
postRequest.setEntity(formEntity);
response = client.execute(postRequest);
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
result = EntityUtils.toString(response.getEntity());
System.out.println("result = "+result);
}else{
System.out.println("responseCode ="+responseCode);
}
} catch (MalformedURLException e) {
// 抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串
} catch (ProtocolException e) {
// 协议故障
} catch (ConnectTimeoutException e) {
} catch (IOException e) {
} catch (Exception e) {
} finally {
}
return result;
}
/**
* 生成请求参数
* @param params
* @return
*/
public static List getpostParams(Map params){
List postParams = new ArrayList(2);
BasicNameValuePair param = null;
for(String key:params.keySet()){
param = new BasicNameValuePair(key, params.get(key));
postParams.add(param);
}
return postParams;
}
/**
* 设置http头
* @param httpPost
* @param header
*/
private static void setHeader(HttpPost httpPost,Map header){
if(httpPost == null || header == null)
return;
for(String key:header.keySet()){
httpPost.addHeader(key, header.get(key));
}
}
}
发表评论
-
Linux USB架构浅谈-guolele
2012-01-20 00:51 703Linux USB架构浅谈-guolele ... -
sock编程技术
2012-01-20 00:51 554sock编程技术 2010年08月09日 同步,阻塞,异 ... -
UNIX TCP/IP配置与检测
2012-01-20 00:51 707UNIX TCP/IP配置与检测 2010年12月14日 ... -
Web Application Stress Tool
2012-01-20 00:50 541Web Application Stress Tool 20 ... -
Jabberd2源代码分析:c2s与router SASL验证过程
2012-01-20 00:50 623Jabberd2源代码分析:c2s与router SASL验证 ... -
android新手上路 一
2012-01-17 01:09 695android新手上路 一 2010 ... -
安卓模拟器手机上网,玩游戏
2012-01-17 01:09 865安卓模拟器手机上网,玩 ... -
下载安卓源代码过程
2012-01-17 01:09 516下载安卓源代码过程 2011年12月23日 linux和 ... -
如何导出wince6.0的SDK 添加MFC支持
2012-01-17 01:09 618如何导出wince6.0的SDK 添加MFC支持 2010年 ... -
修复工具类
2012-01-17 01:08 436修复工具类 2011年05月08日 ... -
ITV常见故障错误代码(中兴平台)
2012-01-15 19:50 865ITV常见故障错误代码(中 ... -
Java语言11个主要特性
2012-01-15 19:50 675Java语言11个主要特性 20 ... -
用PHP代码调用sockets,直接用服务器的网络攻击别的IP
2012-01-15 19:50 645用PHP代码调用sockets,直接用服务器的网络攻击别的IP ... -
1201-p
2012-01-15 19:49 5011201-p 2011年11月30日 内存 威 ... -
shell小结(10)
2012-01-11 12:03 494shell小结(10) 2011年07月01日 #!/b ...
相关推荐
客户端发送16进制给服务端,并行实现socket通道活动状态...netty作为服务器端如何主动的向传感器发送消息,我尝试当每个传感器连接到netty(TCP/IP)时使用一个map把该channelSocket的id和该channelSocket绑定在一起。
服务器端将数据推送到客户端(浏览器)
Python Push 是一个 Python 服务器端库,用于向多个移动平台发送推送通知。 该库仍处于早期阶段,目前仅支持 Ping 推送,这意味着推送中不发送任何数据,但显示了一种使用后同步处理此问题的方法,甚至比发送更好推...
微软Windows® Phone推送通知服务(PushNotificationService)为第三方开发者提供了一个弹性、专注、可持续的通道,支持发送消息、从服务器(web services)端更新Windows® Phone应用程序。 在这一部分中,一个移动应用...
SingleR聊天推送示例源码 源码描述: 一、源码介绍 SignalR 的实现机制与 .NET WCF 或 Remoting 是相似的,都是使用远程代理来实现。在具体使用上,有两种不同目的的接口:PersistentConnection 和 Hubs,其中 ...
1.发送端和监控脚本都放在各个服务器上,监控脚本辅助监控服务器CPU,DISK使用情况和数据库的巡检报告。 发送端负责将巡检结果传送打接受端。 2.接收端和发邮件放到外网的服务器上,负责将监控的结果以邮件方式发送...
远程的推送通知和本地推送通知,都是可以在 App 不在前台运行的时候向其发送相应的消息,这种消息来自服务器下发的最新的数据或者是本地提醒用户要做得事,两种通知在用户手机端展示的效果是一样的。
消息推送服务描述利用微信公众号...服务器端配置配置Node.js环境,推荐使用 。下载代码: git clone https://github.com/songquanpeng/message-pusher.git ,或者git clone https://gitee.com/songquanpeng/message-
一个 Play Framework 演示应用程序,通过reactivemongo 和服务器发送的事件(或 WebSockets)将数据从数据库实时推送到浏览器此控制器方法将新数据从 mongo 实时推送到 SSE 套接字: def search ( filter : String )...
服务器端可以随时将事件推送给客户端,客户端通过监听事件来接收这些数据。 ChatGPT的Server-sent events应用 首先打开ChatGPT网页端,随便问一个问题,然后进入网络选单,清空历史请求记录后,进行网络抓包监听: ...
WebSocket实现了消息推送、聊天室、客户端聊天;服务器端是用C#窗体写的;处理使用了HPSocket,连接数量HPSocket支持多少就支持多少连接数量,目测至少支持1万;网页端主要是以实现功能为主;比较简单;数据传送使用...
simple-push-demo, 在使用服务工作者的站点上,使用推送通知的简单示例 简单服务工作者推...相关文档信息帮助发送推送消息的服务器端库。关于加密有效负载数据的博客文章。博客上的博客。网络推送手册页面演示只需访问
服务器端Google Analytics(分析)PHP客户端入门 重要的 对master分支进行重大更改后,您的捆绑软件可能不再起作用。 要解决该问题,请更新您的composer.json并将您的捆绑软件版本设置为〜1.0.0: { "require" : ...
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。 其他特点包括: (1)建立在 TCP 协议之上,服务器端的实现比较容易。 ...
服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种 建立在 TCP 协议之上,服务器端的实现比较容易 可以发送文本,也可以发送二进制数据 没有同源...
java mina 服务端,socket客服端传信息,客服端上传消息
之前在弄如何将socket客户端的值传给网页,之后在网上看到websocket可以实现主动推送信息给页面,所以就结合socket和websocket,简单写了个小案例,将tcp客户端发送的数据通过写的服务器端主动推送给网页,希望能给...
原本的设计方案是使用ajax对服务器进行定时轮询查询,刚刚开始数据量和使用量不大的时候还好,后来使用量的增加和系统中各种业务的复杂度增加,服务器的压力也越来越大,于是我想使用消息推送的方式替换掉ajax轮询...
首先将视频数据以RTMP的形式发送到流媒体服务器端(Server,比如FMS,Red5,Wowza等),然后客户端(一般为Flash Player)通过访问流媒体服务器就可以收看实时流了。 运行本程序之前需要先运行RTMP流媒体服务器,并...
而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求。 那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口...