Android apps浅析02-Android IM:一个类似手机QQ的即时通讯开源实现

Android apps浅析02-Android IM:一个类似手机QQ的即时通讯开源实现

这是Android上的一个简单的IM应用程序运行时,应用程序发出HTTP请求到服务器,在PHP和MySQL,验证,注册和得到其他朋友的状态和数据来实现,那么它与其他设备的其他应用程序通过通信套接字接口。

1. 数据库只要2个表:朋友表和用户表:

CREATE TABLE  `friends` (
  `Id` int(10) unsigned NOT NULL auto_increment,
  `providerId` int(10) unsigned NOT NULL default ‘0‘,
  `requestId` int(10) unsigned NOT NULL default ‘0‘,
  `status` binary(1) NOT NULL default ‘0‘,
  PRIMARY KEY  (`Id`),
  UNIQUE KEY `Index_3` (`providerId`,`requestId`),
  KEY `Index_2` (`providerId`,`requestId`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT=‘providerId is the Id of the users who wish to be friend with‘;

CREATE TABLE  `users` (
  `Id` int(10) unsigned NOT NULL auto_increment,
  `username` varchar(45) NOT NULL default ‘‘,
  `password` varchar(32) NOT NULL default ‘‘,
  `email` varchar(45) NOT NULL default ‘‘,
  `date` datetime NOT NULL default ‘0000-00-00 00:00:00‘,
  `status` tinyint(3) unsigned NOT NULL default ‘0‘,
  `authenticationTime` datetime NOT NULL default ‘0000-00-00 00:00:00‘,
  `userKey` varchar(32) NOT NULL default ‘‘,
  `IP` varchar(45) NOT NULL default ‘‘,
  `port` int(10) unsigned NOT NULL default ‘0‘,
  PRIMARY KEY  (`Id`),
  UNIQUE KEY `Index_2` (`username`),
  KEY `Index_3` (`authenticationTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2. 核心代码是发送Http request和Socket:

 public String sendHttpRequest(String params)

        {               

                URL url;

                String result = new String();

                try 

                {

                        url = new URL(AUTHENTICATION_SERVER_ADDRESS);

                        HttpURLConnection connection;

                        connection = (HttpURLConnection) url.openConnection();

                        connection.setDoOutput(true);

                        PrintWriter out = new PrintWriter(connection.getOutputStream());

                        out.println(params);

                        out.close();

                        BufferedReader in = new BufferedReader(

                                        new InputStreamReader(

                                                        connection.getInputStream()));

                        String inputLine;

                        while ((inputLine = in.readLine()) != null) {

                                result = result.concat(inputLine);                              

                        }

                        in.close();                     

                } 

                catch (MalformedURLException e) {

                        e.printStackTrace();

                } 

                catch (IOException e) {

                        e.printStackTrace();

                }                       

                if (result.length() == 0) {

                        result = HTTP_REQUEST_FAILED;

                }

                return result;

        }

        public boolean sendMessage(String message, String ip, int port) 

        {

                try {

                        String[] str = ip.split("\\.");

                        byte[] IP = new byte[str.length];

                        for (int i = 0; i < str.length; i++) {

                                IP[i] = (byte) Integer.parseInt(str[i]);                                

                        }

                        Socket socket = getSocket(InetAddress.getByAddress(IP), port);

                        if (socket == null) {

                                return false;

                        }

                        PrintWriter out = null;

                        out = new PrintWriter(socket.getOutputStream(), true);

                        out.println(message);

                } catch (UnknownHostException e) {                      

                        return false;

                        //e.printStackTrace();

                } catch (IOException e) {

                        return false;                   

                        //e.printStackTrace();

                }

                return true;            

        }

3.其他信息:

使用http request和socket实现的Android即时通讯应用
原始源码:https://code.google.com/p/simple-android-instant-messaging-application/
最新源码:https://github.com/Pirngruber/AndroidIM
源码下载:http://download.csdn.net/user/yangzhenping
初始作者提供的源码下载:http://download.csdn.net/detail/yangzhenping/8397989

时间: 2024-10-10 08:23:50

Android apps浅析02-Android IM:一个类似手机QQ的即时通讯开源实现的相关文章

android 根据滑动隐藏或显示导航 类似手机QQ好友个人信息

//重写ScrollView public class NotifyingScrollView extends ScrollView { /** * @author Cyril Mottier */ public interface OnScrollChangedListener { void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt); } private OnScrollChangedListener m

Android apps浅析01-Amazed:一个简单但令人上瘾的加速度为基础的大理石指导游戏。

Android apps浅析01-Amazed:一个简单但令人上瘾的加速度为基础的大理石指导游戏. 这个例子中只有4个类,一个绘制大理石类Marble,一个绘制迷宫类Maze,一个Amazed视图类,一个Amazed活动类 1. 绘制大理石类Marble通过Canvas和Paint绘制,同时提供移动x轴和y轴坐标的方法,每个大理石都有一个状态值:活的/死的 /* * Copyright (C) 2008 Jason Tomlinson. * * Licensed under the Apache

手机版_仿微信 陌陌 安卓版(android)/苹果版(iPhone ios),移动社交APP系统源码,企业即时通讯APP程序源码,手机聊天软件源码,移动聊天APP开发

一:系统背景 根据国际电信联盟发布的<衡量信息社会发展报告>中显示:2014年全球手机用户已超过70亿人,全球互联网用户已超过30亿人,世界上移动通信设备用户总数已超过世界总人口数(还在稳定增长中).根据工业和信息化部发布的数据显示:目前我国移动电话用户规模将近13亿,移动互联网用户规模接近9亿,占总网民数的八成多(我国已是全球移动互联网第一大国).4G/5G时代的开启以及移动终端设备的凸显为移动互联网的发展注入巨大的能量,中国移动互联网产业即将迎来前所未有的飞跃. 二:编写目的 事实证明我国

【原创】轻量级即时通讯技术MobileIMSDK:Android客户端开发指南

申明:MobileIMSDK 目前为个人维护的原创开源工程,现陆续整理了一些资料,希望对需要的人有用.如需与作者交流,见文章底签名处,互相学习. MobileIMSDK开源工程的代码托管地址请进入 [email protected]:点击进入 MobileIMSDK的Android客户端SDK文档:点击进入 学习交流 讨论学习和资料区:点此进入 推荐 移动端即时通讯交流: 215891622 推荐 bug/建议发送至:[email protected] [写在前面] MobileIMSDK的An

源码提供!Android即时通讯和sns开源项目汇总

博客原地址: Android即时通讯和sns开源项目汇总 这是一个整理即时通讯(IM)和社交系统(SNS)优秀开源项目的文档,项目上传github欢迎提交更新. github地址:https://github.com/CameloeAnthony/Perfect_IM_SNS 一 即时通讯和社交系统平台 1 环信(推荐) 2 阿里百川 云旺 3 融云 4 OpenSNS -- #二 基于环信的即时通讯开源项目 数据整理自环信官网,网络数据和github.更多信息请参考环信官方网站和ImGeek

分享基于Android系统的XMPP即时通讯技术项目实战(仿微信开发架构,自定义控件)

即时通讯技术是 网络技术中的明珠.即时通讯产品改变了人们的生活习惯.经过十几年的发展,即时通讯功能的应用也逐渐从专门软件才能实现的功能逐渐成为标准配置.即时通讯技术的应用不仅仅只是用于社交领域,在大多的协同工作领域,以及需要分布结构的网络通讯领域都是非常重要的.讲师本人在android领域有多年的开发经验,在即时通讯系统方面也有深入的研究.在本课程中,详细讲解了android开发中要解决的一些主要的问题,即时通讯在客户端实现的过程,并手把手的进行操作,方便学习和理解.因为课时的原因,对于一些初级

android如果重写onDraw实现一个类似TextView可以显示表情和链接的控件(一)

先看效果图: 写一个超连接支持的对象: /**作为超连接显示的对象*/ public class LinkInfo implements Comparable<LinkInfo>{ private String content; private String type; private String id; private boolean bIsFace = false; private boolean bSelected = false; public static final String

Android Cursor浅析

1. 本文目的 Android ContentProvider提供了进程间数据交换的一种机制.而数据库的查询就是这种机制的应用.那么app通过Uri查询数据库而得到的Cursor究竟是个什么东西?为何可以为我们提供另一个进程的数据?本文以getContentResolver().query(--)函数为起点,全面分析Cursor家族关系类图,理清Cursor跨进程通信的机制. 1.1 客户端的Cursor对象 假设B进程中有一个ContentProvider,A进程通过Uri查询这个Conten

Android Annotations浅析

这阵子遇到了好多事情,挺久没来更新博文了,这两天在学这个开源框架Android Annotations,用起来感觉挺方便的, 相信用过Spring注解的孩子理解起来应该比较容易!就是配置起来比较吃力. 关于AndroidAnnotaions的介绍,网上已经很多了,我这里不再累赘. 1.AndroidAnnotations官网:http://androidannotations.org/(也许你需要翻墙) 2.eclipse中使用androidannotations的配置方法说明:https://