计算机学科概论期末作业
《计算机学科概论》期末大作业
一、什么是机器学习?机器学习的主要学习算法有哪些?请认真研究一种算法,并详细说明。
1.什么是机器学习?
机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。
2.机器学习的主要学习算法有哪些?
机器学习十大经典算法入门如下:
1)SVM(Support Vector Machine)支持向量机
2)决策树(有监督算法,概率算法)
3)随机森林(集成算法中最简单的,模型融合算法)
4)逻辑回归(线性算法)
5)朴素贝叶斯
6)KNN(K Nearest Neighbor) K近邻(有监督算法,分类算法)
7)K-means K均值(无监督算法,聚类算法,随机算法)
8)Adaboost(集成算法之一)
9)马尔可夫
10)EM算法
3.请认真研究一种算法,并详细说明。
“决策树(有监督算法,概率算法)”
a. 只接受离散特征,属于分类决策树。
b. 条件熵的计算 H(Label |某个特征) 这个条件熵反映了在知道该特征时,标签的混乱程度,可以帮助我们选择特征,选择下一步的决策树的节点。
c. Gini和entropy的效果没有大的差别,在scikit learn中默认用Gini是因为Gini指数不需要求对数,计算量少。
d. 把熵用到了集合上,把集合看成随机变量。
e. 决策树:贪心算法,无法从全局的观点来观察决策树,从而难以调优。
f. 叶子节点上的最小样本数,太少,缺乏统计意义。从叶子节点的情况,可以看出决策树的质量,发现有问题也束手无策。
优点:可解释性强,可视化。缺点:容易过拟合(通过剪枝避免过拟合),很难调优,准确率不高
g. 二分类,正负样本数目相差是否悬殊,投票机制
h. 决策树算法可以看成是把多个逻辑回归算法集成起来。
二、请说明软件著作权与专利权的关系。
1.软件著作权和专利的区别是什么
1)法律依据不同
软件的著作权保护依据《著作权法》、《计算机软件保护条例》。
软件的专利保护依据《专利法》,具体审查标准参见国家知识产权局专利《审查指南》第二部分第九章“涉及计算机程序的发明专利申请若干问题”。
2)申请方式不同
软件版权代码写完就自然受到保护,不需要经过审核,提交材料符合规范就可以获得。
软件专利需要经过形式审查和实际审查,要满足新颖性、创造性、实用性等诸多要求,才能够受到保护。
3)简易程度不同
软件著作权获权简单,维权简单,保护力度弱,产生的效益通常是收取授权费用。
软件专利获权困难,维权复杂,保护力度强,产生的效益不仅可以打击竞争对手,还隐性地促进企业内技术的研发。
2.软件采取专利保护的优缺点
1)优点
软件的专利保护可以保护软件的算法,这是软件著作权保护无法实现的。
2)缺点
a.申请专利,专利的技术材料必须公开。
b.申请专利需要支付费用,而且获得专利后每年还需要支付一定的维持费用。
c.申请专利保护需要符合新颖性、创造性、实用性的条件,符合条件的软件并不太多。
d.专利申请及审查可能需要1-3年的时间,如果软件的市场周期较短就不适于专利保护。
3.何为软件专利
首先,软件专利是一项专利,需要向北京的专利局提出申请才能获得;软件专利申请是以技术方案的形式来描述软件的构思,主要是软件的流程图内容,但是具体的采用何种语言,以什么具体的语句实现,专利上并不说明。当授权完成以后,他人采用该构思,就有可能构成侵权。因此,软件专利的保护力度就比软件著作权的保护力度大得多。
申请软件专利并不复杂,选择一家有能力的专业代理公司即可,通过专业工程师,将软件构思做出恰如其分的表述,合理控制保护范围,确保软件的新颖性与创造性,形成一份完美的专利申请文件。
三、利用互联网搜索“高德纳1974 年图灵奖得奖演说”一文,请仔细阅读并写出读后感。
高德纳1974 年图灵奖得奖演说以《作为一门艺术的计算机程序设计》
从开篇就开始了就“艺术”的诠释,以及从古至今艺术的含义的改变,还从各个职业领域对艺术的应用中总结出了程序设计科学相对于艺术的含义。
科学相对于艺术:
“科学”一词似乎以几乎相同于“艺术”一词的意义被人们使用了许多年。例如,人们也谈及7种人文科学,其意义和7种文学相同邓斯·司科特斯在17世纪把逻辑称为“科学的科学,艺术的艺术”。随着文明和知识的发展,词汇具有越来越多独立的意义,“科学”被用来表示知识,而“艺术”表示知识的应用。因此,天文知识成为航行艺术的基础这种情况和我们现在区分“科学”和“工程”的方法几乎完全一样。
科学是这样的知识,即我们对它非常了解,因而可以向计算机讲授它;而如果我们对于某件事情还不充分了解,则处理它就是一门艺术。由于一个算法或一个计算机程序的思想提供了关于我们对任何给定课题的知识深度的一个极其有用的测试,因此从艺术到科学的转化过程,意味着我们在学习如何把某个东西自动化。
科学的方法一般是通过逻辑的、系统的、非个人的、冷静的、理性的这些 词来表征的,而艺术的方法是通过艺术的、创新的、博爱的、渴望的、非理性 的这些词来表征的。在我看来,这两种看起来互相冲突的方法相对于计算机程序设计来说有很大价值。
有些程序是优雅的,有些是精巧的,有些是才华横溢的我的断言是,有可能来写庄重的程序、高尚的程序、真正辉煌的程序!
最后高德纳的图灵奖得奖演说上提出了计算机程序设计过程中科学与技术是相辅相成的:
“没有艺术的科学很可能是低效的,没有科学的艺术肯定是不精确的”
高德纳在得奖演说上自诩为一名艺术家式的程序员:
我们已经看到,计算机程序设计是一门艺术,因为它把累积的知识应用于 世界,因为它要求技巧和机灵,特别还因为它产生美的目标。模糊地意识到自己 是一个艺术家的程序员将喜欢他所做的工作而且将把它做得更好。因此,在计 算机的会议上演讲的人们谈及技术发展水平时,我们会感到很高兴。
四、什么是人工智能?简述人工智能的研究内容与研究目标、人工智能的研究途径和方法、及人工智能的研究领域。人工智能将来肯定能战胜人类智能,对吗?请辨析。
1.什么是人工智能?
所谓“人工智能”是指用计算机模拟或实现的智能。作为一门学科,人工智能研究的是如何使机器(计算机)具有智能的科学和技术,特别是人类智能如何在计算机上实现或再现的科学和技术。因此,从学科角度讲,当前的人工智能是计算机科学的一个分支。
人工智能(Artificial Intelligence) ,英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
人工智能的定义可以分为两部分,即“人工”和“智能”。“人工”比较好理解,争议性也不大。有时我们会要考虑什么是人力所能及制造的,或者人自身的智能程度有没有高到可以创造人工智能的地步,等等。但总的来说,“人工系统”就是通常意义下的人工系统。
人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪(基因工程、纳米科学、人工智能)三大尖端技术之一。这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。
人工智能(Artificial Intelligence,AI)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,但没有一个统一的定义。
2.简述人工智能的研究内容与研究目标、人工智能的研究途径和方法、及人工智能的研究领域。
1)人工智能的研究内容与研究目标
人工智能的研究目标
1.理解人类的认识
2.有效的自动化
3.有效的智能拓展
4.超人的智力
5.通用问题求解
6.连贯性交谈
7.自治
8.学习
9.存储信息
人工智能研究的基本内容
1.认知建模
2.机器感知
3.机器思维
4.机器学习
5.机器行为
6.智能系统与智能计算机
2)人工智能的研究途径与方法
1. 基于结构模拟的神经计算
2.基于功能模拟的符号推演
3.基于行为模拟的控制进化
3)人工智能的分支领域
1.基于脑功能模拟的领域划分
a.机器感知
b.机器联想
c.机器推理
d.机器学习
e.机器理解
f.机器行为
2.基于研究途径与实现技术的领域划分
a.符号智能
b.计算智能
3.基于应用领域的领域划分
a.难题求解
b.自动定理证明
c.自动程序设计
3.人工智能将来肯定能战胜人类智能,对吗?请辨析。
人工智能只能作为人类工具而不可能超过人类智能。
人工智能的本质是对人类智能思维的模拟从方法论上讲模拟一般分为两种结构模拟和功能模拟结构模拟方法根据系统之间形态结构的相似性运用物理模拟和数学模拟方法用模型去模拟对象通过模型来间接地研究原型的规律性这种传统模拟方法在科学技术的发展过程中发挥了巨大的作用。
机器思维和人工智能在未来发展的可能性和重要性有其值得重视的一面,但机器思维只是人的思维在一定程度上的延伸和补充,而不是一种独立的思维,机器思维同人类思维具有本质的区别:
第一,二者的物质承担者不同。
第二,二者在智能活动中的地位不同。
第三,二者在思维的程序上不同。
第四,人工智能没有人类的意识所特有的能动的创造能力。
第五,人工智能没有社会性。
模拟思维不可能超越其被模拟的真正思维。人类同机器的关系永远是制造与被制造、支配与被支配、使用与被使用的关系,而不是相反。认为机器思维能够完全取代人脑,人工智能能够战胜人类智能,机器人将会统治世界的观点是没有根据的。
五、移动互联网是将移动通信和互联网二者结合起来,使之成为一体,是指互联网的技术、平台、商业模式和应用于移动通信技术结合并实践的活动的总称。请查阅资料,完成下列问题:
1.移动互联的现状?
世界各国都在建设自己的移动互联网,各个国家由于国情、文化的不同,在移动互联网业务的发展上也各有千秋,呈现出不同的特点。一些移动运营商采取了较好的商业模式,成功地整合了价值链环节,取得了一定的用户市场规模。特别是在日本和韩国,移动互联网已经凭借着出色的业务吸引力和资费吸引力,成为人们生活中不可或缺的一部分。
移动互联网发展非常迅猛,以娱乐类业务为例,目前,基于手机的娱乐内容已经创造了一个数百亿元的市场,成为运营商发展的重要战略。2007年初,和记黄埔旗下3集团在全球主要市场推出的以X-Series命名的移动互联网业务中就包含了大量的娱乐类服务。
2.移动互联的基本特征?
终端移动性:移动互联网业务使得用户可以在移动状态下接入和使用互联网服务,移动的终端便于用户随身携带和随时使用。
业务使用的私密性:在使用移动互联网业务时,所使用的内容和服务更私密,如手机支付业务等。
终端和网络的局限性:移动互联网业务在便携的同时,也受到了来自网络能力和终端能力的限制:在网络能力方面,受到无线网络传输环境、技术能力等因素限制;在终端能力方面,受到终端大小、处理能力、电池容量等的限制。无线资源的稀缺性决定了移动互联网必须遵循按流量计费的商业模式。
业务与终端、网络的强关联性:由于移动互联网业务受到了网络及终端能力的限制,因此,其业务内容和形式也需要适合特定的网络技术规格和终端类型。
3.移动互联的局限性?
在网络能力方面,受到无线网络传输环境、技术能力等因素限制;在终端能力方面,受到终端大小、处理能力、电池容量等的限制。无线资源的稀缺性决定了移动互联网必须遵循按流量计费的商业模式。
4.请谈一下你的感想。
移动互联网业务的特点不仅体现在移动性上,可以“随时、随地、随心”地享受互联网业务带来的便捷,还表现在更丰富的业务种类、个性化的服务和更高服务质量的保证,当然,移动互联网在网络和终端方面也受到了一定的限制。但是即使是这样,我们现在的生活还是已经离不开移动互联带给我们的便利。
六、解答题:
1.信息时代人们高度依赖移动即时通信工具,通信工具可以分解为移动通信功能和通信软件的叠加功能。常见的移动通信功能实现方式有:3G、4G、WiFi、蓝牙、微波、ZiGbee 等,负责完成无线信号的传递;通信软件负责信号的呈现并完成人机交互模式,常见的有:QQ、微信、飞信、泡泡、阿里旺旺等;随着技术的发展新的移动通信方式和通信软件也会发生新的变化,请给出通信工具系统实现所需类的设计,需要满足可复用、可扩展、可维护的特点。
移动即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议。前 者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议。而后者是以数 据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议。
QQ就是使用UDP协议进行发送和接收消息的。当你的机器安装了OICQ以后,实际上,你既是服务端(Server),又是客户端(Client)。当你登录OICQ时,你的OICQ作为Client连接到腾讯公司的主服务器上,当你看谁在线时,你的OICQ又一次作为Client从QQ Server上读取在线网友名单。当你和你的OICQ伙伴进行聊天时,如果你和对方的连接比较稳定,你和他的聊天内容都是以UDP的形式,在计算机之间传 送。如果你和对方的连接不是很稳定,QQ服务器将为你们的聊天内容进行中转。其他的即时通信软件原理与此大同小异。
一般的步骤:
首先,用户A输入自己的用户名和密码登录即时通讯服务器,服务器通过读取用户数据库来验证用户身份,如果用户名、密码都正确,就登记用户A的IP地址、IM客户端软件的版本号及使用的TCP/UDP端口号, 然后返回用户A登录成功的标志,此时用户A在 IM系统中的状态为在线(Online Presence)。
其次,根据用户A存储在IM服务器上的好友列表 (Buddy List),服务器将用户A在线的相关信息发送到也同时在线的即时通讯好友的PC机,这些信息包括在线状态、IP地址、 IM客户端使用的TCP端口(Port)号等,即时通讯好友PC机上的即时通讯软件收到此信息后将在PC桌面上弹出一个小窗口予以提示。
第三步,即时通讯服务器把用户A存储在服务器上的好友列 表及相关信息回送到他的PC机,这些信息包括也在线状态、IP地址、IM客户端使用的TCP端口(Port)号等信息,用户A的PC机上的IM客户端收到 后将显示这些好友列表及其在线状态。
接下来,如果用户A想与他的在线好友用户B聊天,他将直接通过服务器发送过来的用户B的IP地址、TCP端口号等信息,直接向用户B的PC机发出聊天信息,用户B的IM客户端软件收到后显示在屏幕上,然后用户B再直接回复到用户A的PC机,这样双方的即时文字消息就不通过 IM服务器中转,而是通过网络进行点对点的直接通讯,这称为对等通讯方式(Peer To Peer) 。在商用即时通讯系统中,如果用户A与用户B的点对点通讯由于防火墙、网络速度等原因难以建立或者速度很慢, IM服务器还提供消息中转服务,即用户A和用户B的即时消息全部先发送到IM服务器,再由服务器转发给对方。早期的IM系统,在IM客户端和IM服务器之间通讯采用采用UDP协议,UDP协议是不可靠的传输协议,而在 IM客户端之间的直接通讯中,采用具备可靠传输能力的TCP协议。随着用户需求和技术环境的发展,目前主流的即时通讯系统倾向于在即时通讯客户端之间、即时通讯客户端和即时通讯服务器之间都采用TCP协议 。
S——C1
|
| C1每次想和C2通信,先向S递一个申请,然后S同意,把信息转交C2, 以后每次通信都这样
C2
S——C1
|
| C1第一次想和C2通信,向S递一个申请,S同意,告诉C1,C2,然后 C1和 C2之间建立了一条连接,可以直接通信,无需经过S.
C2
第 一种,对服务器的性能要求比较高,要求服务器可以同时处理很高的连接数,因为所有信息都要通过服务器进行传递,同时,它可以对所传递的信息进行控制。
第二种,仅仅是用户登陆或下线时与服务器进行连接,平时进行通信时,是用户之间直接进行点对点的连接,这种实现更合理一些。
————————————————
原文链接:https://blog.csdn.net/u012701023/article/details/79223243
通信软件系统架构设计
该系统主要包括三层,客户端,服务器端,以及数据库服务器,客户端用来提供用户的登录,服务器端用来对登录的用户进行管理以及用来处理信息之间的转发,数据库服务器主要存放一些重要的信息。
系统的总体功能设计
根据上述需求的描述,对该系统按照功能进行了模块的细化,主要包括注册登录、好友聊天、好友组管理、群聊天4个模块,还有很多其它小模块,这4个模块是实现该系统的核心模块,模块之间的耦合程度非常低,其中注册模块是通过B/S结构来实现,不需要安装客户端。下图是上述的4个重要模块的用例交互图。
网络通讯编码实现
聊天客户端部分类设计
下边是聊天客户端的核心代码,它用来判定消息的来源以及针对该消息所进行的相应的操作。
for(int i=0;i<MyPersonTree.alist.size();i++) //判断哪个好友发来的信息 { p=(Person)MyPersonTree.alist.get(i); if(p.getID().equals(hisJICQ)) break; else p=null; } if(p!=null) //队列中有该好友 { JICQChatFrame jchatExist=null; int isExistFrame=0;//判定聊天窗口是否已经打开 for(int i=0;i<MyPersonTree.vector.size();i++) //遍历向量 { jchatExist=(JICQChatFrame)MyPersonTree.vector.get(i); if(jchatExist.JICQ.equals(hisJICQ)) { isExistFrame=1;//聊天窗口已经打开 break; } } if(isExistFrame==0)//聊天窗口没有打开,新建一个窗口 { JICQChatFrame jchat=new JICQChatFrame(p,this); MyPersonTree.vector.addElement(jchat); jchat.setMessage(headmsg,msg); } else {//在聊天窗口中显示该信息 jchatExist.setMessage(headmsg,msg); } } else { JICQChatFrame jchatExist=null; int isExistFrame=0; for(int i=0;i<MyPersonTree.UnKonwVector.size();i++) //陌生人的信息 { jchatExist=(JICQChatFrame)MyPersonTree.UnKonwVector.get(i); if (jchatExist.JICQ.equals(hisJICQ)) { isExistFrame=1; break; } } }
服务器端监听与转发消息类设计
下边是服务器端的监听程序,如果发现有socket连接,就创建一个与该连接所对应的一个线程,该线程主要用来处理用户之间的信息交互。
public void run() { try { while(true) //始终监听状态 { Socket client=listen.accept(); //创建用户线程 PersonThread f=new PersonThread(client); f.setPriority(Thread.MIN_PRIORITY); f.start(); } } Catch(IOException e) { System.err.println("Erro:"+e); System.exit(1); } } //服务器端的消息转发函数 public static void broadcast(String msg,String hisJICQ) { int i; PersonThread you; for(i=0;i<connections.size();i++) { you=(PersonThread)chatserverthree.connections.elementAt(i); if(you.JICQ.equals(hisJICQ)) you.send(msg); } }
服务端单线程上线处理类设计
下边是服务器端上的单线程的处理代码,主要通过网络流来读取客户端发送的消息,然后将消息分解,用来区分消息的类型,譬如是群消息还是个人消息等。
While(true) { line=in.readUTF(); System.out.println(line); //将读取的信息按照特定格式进行拆分 StringTokenizer stk=new StringTokenizer(line,"#"); //PEOPLE+"#"+JICQ if(stk.hasMoreElements()) key=(String)stk.nextElement(); //用户上线提示 if(key.equals("PEOPLE")) { try{ String JNUM=(String)stk.nextElement(); this.JICQ=JNUM; for(int i=0;i<chatserverthree.connections.size();i++) {PersonThread tt=(PersonThread)chatserverthree.connections.get(i); if(tt.JICQ.equals(this.JICQ)) { chatserverthree.broadcast("RELOG#YES",tt.JICQ); chatserverthree.connections.remove(i); tt.stopThread(); break; }} //将该线程加入到线程向量中 chatserverthree.connections.addElement(this); Friends f=new Friends(); ResultSet rs=f.selectAddMePerson(JNUM); ArrayList flist=new ArrayList(50); while(rs.next()) { flist.add(rs.getString(1)); } for(int i=0; i<chatserverthree.connections.size();i++) { PersonThread pt=(PersonThread)(chatserverthree.connections.elementAt(i)); if(flist.contains((String)pt.JICQ)) { chatserverthree.broadcast(line,pt.JICQ); }} s_MyDetails sMy=new s_MyDetails(); //从信息表中读取离线信息,然后将之删除 ResultSet rsMessage=sMy.isHaveMessage(JNUM); if(rsMessage!=null) while(rsMessage.next()) { int FriendJICQ=rsMessage.getInt("FriendJICQ"); int MyJICQ=rsMessage.getInt("MyJICQ"); String msgHead=rsMessage.getString("MessageHead"); String msgBody=rsMessage.getString("MessageContent"); int flag=rsMessage.getInt("flag"); String Allmsg=""; if(flag==1) Allmsg="MSGONE#"+FriendJICQ+"#"+MyJICQ+"#"+msgHead+"#"+msgBody; else Allmsg="ADDFRIEND#"+FriendJICQ+"#"+MyJICQ+"#"+msgHead+"#"+msgBody; chatserverthree.broadcast(Allmsg,JNUM); } sMy.delOldMessage(JNUM); } }
注册模块的实现
数据库连接
JDBC数据库连接的核心代码,IP地址设定为本机的IP:
Connection conn = null; Statement st = null; try { //加载驱动程序 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); //创建数据库的连接 Conn=DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;databaseName=JICQ","sa", "sa"); }
字符编码过滤器的核心代码
该过滤器实现Servlet的过滤器接口,设置字符编码为GB2312,主要用来解决在表单提交工程中所出现的中文乱码问题,主要用来解决以post方式提交的表单所出现的中文乱码问题。
public class CharacterEncodingFilter implements Filter { protected FilterConfig filterConfig; protected String encoding=null; protected boolean ignore=true; //初始化字符过滤器 public void init(FilterConfig filterconfig) throws ServletException { this.filterConfig = filterconfig; //设定编码方式,从web.xml配置文件中获取该参数 this.encoding = filterconfig.getInitParameter("encoding"); String value = filterconfig.getInitParameter("ignore"); if(value==null)this.ignore=true; else if(value.equalsIgnoreCase("true"))this.ignore=true; else if(value.equalsIgnoreCase("yes"))this.ignore=true; else this.ignore=false; } //重写Filter的过滤方法 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if(ignore||request.getCharacterEncoding()==null){ String encoding =this.selectEncoding(request); if(encoding!=null){ System.out.println("encoding"+encoding); request.setCharacterEncoding(encoding); } } chain.doFilter(request,response); } //销毁该字符过滤器 public void destroy() { this.encoding=null; this.filterConfig=null; } protected String selectEncoding(ServletRequest servletrequest) { return (this.encoding); } }
————————————————
原文链接:https://blog.csdn.net/qq_17669865/article/details/89389699
2.(1)中所提到的所有通信软件一般都有群的功能,群可以模拟生活圈、工作圈、同学圈、生意圈等相对固定组织,也可以模拟讨论组、读书会、畅谈吧、学习班等临时性的组织,这些组织可以相互交叉、相互叠加,即每个组织下面都可以有若干个其他的组织。这些组织的本质都是群,其核心功能是群成员的信息共享。给出以上所描述的群的设计,实现群的信息共享的基本功能,体现群内可以任意个数、任意深度组合不同性质子群的特点。
消息发送功能
通用消息发送
会话获取:会话是指面向一个人或者一个群组的对话,通过与单个人或群组之间会话收发消息,发消息时首先需要先获取会话,获取会话需要指定会话类型(群组 & 单聊),以及会话对方标志(对方帐号或者群号)。获取会话由 TIMManager 中的getConversation 实现。
原型:
/**
* 获取会话
* @param type 会话类型
* @param peer 参与会话的对方, C2C 会话为对方帐号 identifier, 群组会话为群组 ID
* @return 会话实例
*/public TIMConversation getConversation(TIMConversationType type, String peer)
示例:
//获取单聊会话String peer = "sample_user_1"; //获取与用户 "sample_user_1" 的会话
conversation = TIMManager.getInstance().getConversation(
TIMConversationType.C2C, //会话类型:单聊
peer); //会话对方用户帐号//对方ID
//获取群聊会话String groupId = "TGID1EDABEAEO"; //获取与群组 "TGID1LTTZEAEO" 的会话
conversation = TIMManager.getInstance().getConversation(
TIMConversationType.Group, //会话类型:群组
groupId); //群组 ID
消息发送:通过 TIMManager 获取会话 TIMConversation 后,可发送消息和获取会话缓存消息。IM SDK 中消息的解释可参阅 IM SDK 对象简介。IM SDK 中的消息由 TIMMessage 表达, 一个 TIMMessage 由多个 TIMElem 组成,每个 TIMElem 可以是文本和图片,也就是说每一条消息可包含多个文本和多张图片。
原文链接:https://blog.csdn.net/qq_17669865/article/details/89389699
原文链接:https://blog.csdn.net/u012701023/article/details/79223243
介几个链接点一点,很好用滴哦!!