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

简介: Android apps浅析02-Android IM:一个类似手机QQ的即时通讯开源实现这是Android上的一个简单的IM应用程序运行时,应用程序发出HTTP请求到服务器,在PHP和MySQL,验证,注册和得到其他朋友的状态和数据来实现,那么它与其他设备的其他应用程序通过通信套接字接口。

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

 

目录
相关文章
|
5月前
|
安全 前端开发 关系型数据库
IM即时通讯系统开发技术规则
IM即时通讯系统开发涵盖客户端与服务器端,涉及前端、后端、网络通信及多媒体处理等技术领域,支持文字、语音、图片、视频等多种实时交流方式。开发流程包括需求分析、技术选型、系统设计、开发实现、测试优化及部署维护等阶段,需关注网络通信、多媒体处理、安全性及可扩展性等关键技术点,广泛应用于社交、客服、团队协作及游戏等领域。
|
2月前
|
数据采集 自然语言处理 安全
控制电脑手机的智能体人人都能造,微软开源OmniParser
微软研究团队推出OmniParser,旨在提升GPT-4V等多模态模型在用户界面操作方面的性能。通过解析用户界面截图为结构化元素,OmniParser显著增强了模型的交互能力,使其在多种基准测试中表现出色。该技术开源,促进了社区合作与技术创新,但同时也面临数据质量、计算资源及安全隐私等挑战。
102 14
|
4月前
|
存储 网络协议 前端开发
基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.7版已发布
Android端主要更新内容: 1)[优化] 优化了首页“消息”列表中单聊类型未正确同步时的收发消息和点击后的处理逻辑; 2)[优化] 优化了首页“消息”列表中同一好友和陌生人会话不能自动合并的问题;
87 2
|
2月前
|
算法 前端开发 API
开源轻量级IM框架MobileIMSDK的鸿蒙NEXT客户端库已发布
MobileIMSDK-鸿蒙端是一套基于鸿蒙Next(纯血鸿蒙)系统的IM即时通讯客户端库: 1)超轻量级(编译后库文件仅50KB)、无任何第3方库依赖(开箱即用); 2)纯ArkTS编写、无Native代码、高度提炼、简单易用; 3)基于鸿蒙Next标准WebSocket API,简洁优雅; 4)可运行于任何支持鸿蒙Next的平台; 5)能与 MobileIMSDK的各种客户端完美互通; 6)可应用于鸿蒙Next中的消息推送、客服聊天、企业OA、IM等场景。
120 45
|
3月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
423 4
|
3月前
|
Rust 前端开发 JavaScript
Wasm在即时通讯IM场景下的Web端应用性能提升初探
简单的来说,Wasm就是使用C/C++/Rust等语言编写的代码,经过编译后得到汇编指令,再通过JavaScript相关API将文件加载到Web容器中(即运行在Web容器中的汇编代码)。Wasm是一种可移植、体积小、加载快速的二进制格式,可以将各种编程语言的代码编译成Wasm模块,这些模块可以在现代浏览器中直接运行。尤其在涉及到GPU或CPU计算时优势相对比较明显。
49 0
|
4月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
281 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
3月前
|
安全 搜索推荐 Android开发
Android vs. iOS:解锁智能手机操作系统的奥秘####
【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
127 3
|
4月前
|
移动开发 网络协议 小程序
基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v9.1版已发布
RainbowChat是一套基于开源IM聊天框架 MobileIMSDK 的产品级移动端IM系统。RainbowChat源于真实运营的产品,解决了大量的屏幕适配、细节优化、机器兼容问题
80 5
|
4月前
|
Web App开发 Android开发
利用firefox调试安卓手机端web
该教程详细介绍如何通过Firefox浏览器实现手机与电脑的远程调试。手机端需安装最新版Firefox,并按指定步骤设置完成;电脑端则需安装15版及以上Firefox。设置完成后,通过工具栏中的“远程调试”选项,输入手机IP地址即可连接。连接确认后,即可使用电脑端Firefox调试器调试手机上的Web信息。注意,调试前手机需提前打开目标网页。
145 2

热门文章

最新文章