一、简介

即时通讯 : IM  instant messager

是通过消息通道传输消息对象

消息通道由TCP/IP UDP实现

TCP/UDP传输消息的时候,封装上IP,

IP  网络上电脑 的编号

port 网络程序的编号

二、TCP与UDP的区别

Tcp UDP

大文件 限定大小 ,64K

可靠,三次握手 不可靠

面向连接 不面向连接

效率低 效率高

三、三次握手

第一次     客户端---(消息)--服务端

第二次     服务端-- (什么时候)-- 客户端

第三次     客户端--(现在)-- 服务端

四、即时通讯的觉方式

1. 在线直传: 不经过服务器,直接从客户端传向客户端

2. 在线代理: 经过服务器,中转,到达目标中账号

3. 离线代理: 经过服务器,若对方不在线,将数据储存在服务端,对应账号上线后再传输数据

4. 离线扩理: 将暂存服务器端的数据以其它方式(邮件,短信等)方式传输给目标

五、请求服务器的基本代码逻辑

package com.administrator.imtest;import android.app.Activity;import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;/*** Created by Administrator on 2015/11/9.*/
public class SocketConnect extends Activity  {/*** 上传信息的url**/private String url="";/*** 服务器的url**/private String HOST =url;/*** 服务器端口号**/private int POST = 8080;/*** 连接服务器,信息交互的过程**/private void function(){new Thread() {@Overridepublic void run() {try {/*** 创建一个连接通道**/Socket socket = new Socket(HOST, POST);/*** 读取信息的流*/final DataInputStream dataInputStream = new DataInputStream(socket .getInputStream());/*** 写入信息的流*/DataOutputStream dataOutputStream = new DataOutputStream(socket .getOutputStream());//上传数据dataOutputStream.writeUTF(xml);dataOutputStream.flush();new Thread() {@Overridepublic void run() {while (true){try {/*** 等待服务器返回的消息* 注意这里不是死循环*/String xml = dataInputStream.readUTF();} catch (IOException e) {e.printStackTrace();}}}}.start() ;} catch (IOException e) {e.printStackTrace();}}}.start() ;}}

六、与服务器进行数据交互的核心代码

public class MessageConnection extends Thread {/*** 基本实现步骤* 1. 连接到服务端* 2. 发送消息* 3. 接收消息* 4. 断开与服务器的连接*///ip地址private String HOST = "";//端口号private int POST = 00;private Socket mSocket;private DataInputStream reader = null;private DataOutputStream writer = null;/*** 设置更改服务器地址与端口的方法*/private String getHost() {return HOST;}public void setHOST(String host) {this.HOST = host;}private int getPost() {return POST;}public void setPOST(int post) {this.POST = post;}/*** 创建连接*/public void connect() {if (mSocket == null) {try {mSocket = new Socket(getHost(), getPost());//获取服务器返回的流reader = new DataInputStream(mSocket.getInputStream());//获取输出流writer = new DataOutputStream(mSocket.getOutputStream());mIsRunThread = true;//开启线程start();} catch (IOException e) {e.printStackTrace();}}}/*** 发送消息** @param mesge*/public void sendMessage(String mesge) {try {writer.writeUTF(mesge);writer.flush();} catch (IOException e) {e.printStackTrace();}}/*** 声明接口*/public static interface OnMessageReceiveListener {/*** 声明接收信息对象的抽象方法*/public void onReceiveMessage(MessageBean messageBean);}/*** 有多个消息的话,用于储存消息监听的集合** @param savedInstanceState*/private ArrayList<OnMessageReceiveListener> mMessageBeanArrayList = new ArrayList<>();/*** 添加消息监听的方法*/public void addOnMessageReceiveListener(OnMessageReceiveListener onMessageReceiveListener) {mMessageBeanArrayList.add(onMessageReceiveListener);}/*** 移除消息监听的方法*/public void removeOnMessageReceiveListener(OnMessageReceiveListener onMessageReceiveListener) {mMessageBeanArrayList.remove(onMessageReceiveListener);}/*** 用于判断是否打开子线程的方法*/private boolean mIsRunThread = true;@Overridepublic void run() {super.run();while (mIsRunThread) {try {String xml = reader.readUTF();MessageBean messageBean = new MessageBean();messageBean = (MessageBean) messageBean.fromXml(xml);if (messageBean != null) {for (OnMessageReceiveListener listener : mMessageBeanArrayList) {listener.onReceiveMessage(messageBean);}}} catch (IOException e) {e.printStackTrace();}}}/*** 断开连接** @throws IOException*/public void disConnect() {if (mSocket != null) {try {mSocket.close();} catch (IOException e) {e.printStackTrace();}try {writer.close();} catch (IOException e) {e.printStackTrace();}try {reader.close();} catch (IOException e) {e.printStackTrace();}stop();mIsRunThread = false;}}
}

七、提交用户名与密码到服务器进行登录验证

package com.administrator.imtest;import android.app.Activity;
import android.os.Bundle;import com.administrator.imtest.bean.MessageBean;
import com.administrator.imtest.util.MessageConnection;public class MainActivity extends Activity {private MessageConnection mMessageConnection;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);/*** 向服务端上传数据下读取数据*//*** 建立连接,初始化消息通道**/new Thread(new Runnable() {@Overridepublic void run() {mMessageConnection = new MessageConnection();/***添加消息接收器,监听器*/mMessageConnection.addOnMessageReceiveListener(mOnMessageReceiveListener);mMessageConnection.connect();}}).start();}/*** xml是已经封装了登录信息的* 发送数据的方法*/private void sendMessage(String xml) {if (mMessageConnection != null) {mMessageConnection.sendMessage(xml);}}/*** 关闭通道,关闭连接*/@Overrideprotected void onDestroy() {super.onDestroy();if (mMessageConnection != null) {mMessageConnection.disConnect();/***移除消息监听器*/mMessageConnection.removeOnMessageReceiveListener(mOnMessageReceiveListener);}}/*** 调用 接收消息的接口*/private MessageConnection.OnMessageReceiveListener mOnMessageReceiveListener = new MessageConnection.OnMessageReceiveListener() {@Overridepublic void onReceiveMessage(MessageBean messageBean) {/*** 进行判断,如果果提交的用户名正确 那么就跳转到到好友列表**/}};}

Android-即时通训相关推荐

  1. 手机即时通服务器地址修改,手机即时通服务器地址修改

    手机即时通服务器地址修改 内容精选 换一换 本文介绍使用云手机服务时需要了解的基本概念.云手机是一台包含原生安卓操作系统,具有虚拟手机功能的云服务器,简单来说,云手机=云服务器+Android OS. ...

  2. 2020交友聊天PHP代码 社交网络网站源代码 聊天即时通源代码送APP源码

    2020交友聊天PHP代码 社交网络网站源代码 聊天即时通源代码送APP源码 这是一款社交网络系统,你可以在简短的几分钟内创建自己的社交平台,支持发布视频.音频.文件.图片,用户之间可以相互关注加好友 ...

  3. openfire android 发送图片,基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等...

    这篇文章主要介绍如何实现点对点单人聊天.多人的群聊.以及如何给对方发送文件,如何发送图片消息和语音消息等功能. 1.单人聊天 1.首先创建聊天对象 /** * 创建聊天窗口 * @param jid ...

  4. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 相关推荐阅读:. Android即时通讯 ...

  5. Android 即时通讯开发小结(一)

    本文将基于 IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 客户端架构 作为一个 IM 软件,最重要的一个特性就是保证消息的达到率和实时性. ...

  6. Android 即时通讯开发

    Android 即时连天工具的开发 客户端,开三个线程,thread1监听接收消息,用udp,thread2定时向服务器发送在线消息,用tcp,thread3每隔一段时间检查发送的消息的时间是否超时( ...

  7. 中石油即时通手机版显示服务器登录失败,中石油即时通手机最新版app

    中石油即时通手机最新版app这是一款专注于中国石油集团内部员工的即时通讯软件,软件包括工作看板.网络日程.项目计划.待办事宜.工作日志.签到考勤.云记事本.新闻公告.通知.工作流审批.移动客户管理等常 ...

  8. 即时通登陆显示服务器失败,即时通服务器地址

    即时通服务器地址 内容精选 换一换 本章节指导您使用MongoDB客户端,通过弹性云服务器内网方式连接GaussDB(for Mongo)副本集实例.操作系统使用场景:弹性云服务器的操作系统以Linu ...

  9. Android即时聊天系统设计

    Android即时聊天系统设计 最近比较闲,当工作比较闲是意味着什么呢(⊙﹏⊙) 于是,总结一下前几个月的毕业设计吧,说不好对一些有需要的朋友有帮助呢,也算是为社会做贡献了( 简单的即时聊天系统,设计 ...

  10. android实训报告日记,android目实训报告.doc

    android目实训报告 Android项目实训报告 学号 201033201 姓名 ***项目 名称 记事本项 目 介 绍 我的项目分为心情日志,备忘 录和日记,有记录和查询的功能项 目 分 析 我 ...

最新文章

  1. workerman连接mysql_workerman Mysql使用
  2. rust建的怎么拆除_农民为什么建简易房?
  3. Python之woe:woe库的简介、安装、使用方法之详细攻略
  4. C++Template 模版的本质
  5. 《Python Cookbook 3rd》笔记(3.9):大型数组运算
  6. Swoole 2019 :化繁为简、破茧成蝶
  7. gerrit与crowdid, openid集成,设置openIdSsoUrl 直接登录
  8. 快应用宣布支持第三方DSL
  9. python第一题 引发的思考和学习
  10. p2371bzoj2118 墨墨的等式
  11. 格式工厂视频格式转换器下载
  12. python毕业设计 深度学习抽烟行为检测系统 - yolo opencv
  13. 论军人的战斗意志—亮剑精神
  14. 怎么把视频制作成GIF动态图?这几种制作方法很简单
  15. 解决video标签在部分安卓默认浏览器上的播放样式问题
  16. SQL语句常见面试题(一)
  17. 国际会议latex/overleaf模板
  18. 启嘉春秋:《三字经》
  19. 我对“Hello World”30年的爱恨情仇
  20. 研究 | CT图像迭代重建算法研究进展

热门文章

  1. CVPR 2019 Oral | 京东目标检测算法ScratchDet的深入思考
  2. 「Python基础知识」Python的split方法如何使用
  3. 玩出花,只用文本就能干CV的活!
  4. 超神!卡内基博士ImageNet夺冠后转战NLP!
  5. 速度堪比Adam,准确率媲美SGD,还能稳定训练GAN:全新优化器成为NeurIPS爆款
  6. 收藏 | 深度学习调试经验
  7. 年终总结 | 2019年人工智能+计算机视觉+深度学习笔记思维导图汇总
  8. 独家总结 | KNN算法Python实现(附代码详解及注释)
  9. oracle导入字符集,Oracle导入字符集问题
  10. 慧材技术中核普达测量与测绘系统介绍(一)