Socket基本概念与原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.I M基本概念与原理
QQ 微信陌陌
即时通讯
IM :instant messager
通过消息通道传输消息对象,一个账号发往另一个账号,只要账号在线,即时获得消息。
消息通道:由TCP/IP UDP 实现的通道
1.1. TCP/IP UDP
TCP/IP UDP:传输信息的时候,封装上的
1.2. 三次握手
1.3. 常见形式
1.4. IM原理
注意事项:消息通道不能断开
1)登录账号密码,提交,经服务端确定
2)成功以服务端发回好友信息
3)消息必须包含from:来源to:去向content:内容time:时间
4)由服务器转发给目标账号
1.5. 注意点
2.核心概念
2.1. 消息内容_IM服务端接口文档
IM服务接口文档:疑问当的形式规定通讯消息的字段与格式(xml/json)
消息对象:消息内容+附加字段的封装
2.2. 消息内容_Xstream自动生成juit
XStream
2.3. 项目应用:继承基类
Serializable{
x.alias(this.getClass().getSimpleName(), this.getClass());
// ②调用toXml 或者fromXml
return x.toXML(this);
}
public Object fromXml(String xml) {
XStream x = new XStream();
x.alias(this.getClass().getSimpleName(), this.getClass());
// ②调用toXml 或者fromXml
return x.fromXML(xml);
}
public String toJson() {
Gson gson = new Gson();
return gson.toJson(this);
}
public Object fromJson(String json) {
Gson gson = new Gson();
return gson.fromJson(json, this.getClass());
}
}
2.4. 消息通道-连接对象
2.5. 消息发送
2.6. 消息接收
2.6.1.监听器
// ①申明接口
publicstaticinterface OnQQMessageReceiveListener { // ②抽象方法
// ③定义参数
publicvoid onReceive(QQMessage msg);
}
private List
// ④添加方法移除
publicvoid
addOnQQMessageReceiveListener(OnQQMessageReceiveListener listener) {
listeners.add(listener);
}
publicvoid
removeOnQQMessageReceiveListener(OnQQMessageReceiveListener listener) {
listeners.remove(listener);
}
privateboolean flag = true;
// ⑤参数产生的地方调用
@Override
publicvoid run() {
super.run();
while (flag) {
try {
String xml = reader.readUTF();
QQMessage msg = new QQMessage();
msg = (QQMessage) msg.fromXml(xml);
if (msg != null) {
for (OnQQMessageReceiveListener listener : listeners) {
listener.onReceive(msg);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.项目功能-Socket
3.1. 模块:启动页面
在xml文件中配置界面没有标题头:
setContentView(yout.activity_splash);
// ①布局 ImageView
// ②等待3000
ThreadUtils.runInThread(new Runnable() { @Override
publicvoid run() {
try {
//检查更新
//初始
Thread.sleep(3000);
startActivity(new
Intent(getBaseContext(),LoginActivity.class));
finish();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
3.2. 模块:登录
butterknife.jar的使用: