基于socket的即时通讯的研究毕业设计 下载本文

烟台大学毕业论文(设计)

1 绪 论

1.1 本课题的研究意义及必要性

我们已经步入了互联网时代,在这个网络无所不在的今天,即时通讯通过网络无限的缩小了人与人之间的距离,整个地球也就显得越来越小,更有了地球村的说法。比如你在福建却能与远在千里之外的人聊天,这在互联网普及之前是完全不可思议的事情。现在只有你能连上网络不管你在哪里,只要打开这些即时通讯软件你就可以给他发消息不管他是否在线。

正如我们所知的,国内的中小型企业纷纷建起了自己的局域网既方便员工的内部交流又增加了企业内部的安全性。在局域网内交流,不需要使用Internet网络,这样的好处是可以节省很多网络资源,又充分的利用现有的网络资源一举多得。在公司内部的交流就可以自由的交流,分享文件极大的提高了人们的工作效率。

1.2 相关领域国内外应用的现状及发展趋势

在国内做即时通讯聊天的公司有很多,据我所知的就有:网易泡泡,通讯qq,微信,易信,还有近期网络上很火那个开源的蘑菇街的公司内部通讯TeamTalk。本人选取了比较典型的代表腾讯qq进行了一些研究,作为这次课题的准备。

现如今国内最大的通信软件是腾讯qq,这个通讯软件占据了中国的70%以上的手机移动即通讯市场,自从1999年以来进入国内的手机移动端等就迅速的占领我国的即时通讯市场,国内的用户量始终占其榜首。即使最近几年微信与陌陌的异军突起,但是腾讯qq还是稳坐钓鱼台每年还是保持稳定的增长,究其原因还是因为qq它不断的完善和越来越友好的用户界面。本项目就是基于socket的TCP即时通讯项目,采用单服务器模式,使用android语言编写客服端,java语言编写服务器。

1.3 java语言

1.3.1 java发展史

Java发展于1995年,一开始还是一个名不经传的小语言,但是该语言的具有的特性使迅它迅速吸引了当时所有的程序员和软件公司的关注。该语言的特点有安全性,跨平台性,面对对象还可以使用网络等特点无不使它能够让更多人接受。那个时候互联网主要是以web平台模式发展,而java语言的推出立马就让程序员与软件公司接受,众多程序员纷纷尝试使用java语言编写自己的网络程序,并且将其发布于全世界各地。正如java语言的跨平台性,使其立马在世界各地推广开来。包括oracle,微软,Apple,IBM等公司都与sum公司签订合同,使用java平台语言的技术。微软的总裁大boos还曾说过:“Java语言是长时间以来最卓越的程序设计语言”。正如他所意料的java语言目前已

1

烟台大学毕业论文(设计)

经成为了当下最盛行的网络编程言语,世界各地大大学也纷纷开设了java课程,为后来android系统的流行积累下了深厚的基础,目前流行的android系统也正是基于java语言编写的。Java语言已经成为了世界上程序员运用最多,市场率占有量最高的语言了。

随着科技的发展,在计算机领域通常有着18个月更新一个技术就如我们的计算模式在经历过以大型机为代表的集中计算和以pc机为代表的分散计算后,现在已近步入互联网计算的时代。互联网就是把所有的计算机组成起来形成一个网络分享我们的数据而互联网计算的最大特色就是计算机的异构,即计算机操作系统和计算机的类型都是不一样的,比如sum公司而言,据调查显示它们使用的软件是UNIX中的solaris操作系统但是使用工作站的硬件却是sparc体系,pc机的硬件是INTEL体系,操作系统是windows或者是Linux,为什么它们的软件可以通用呢?当初相应的编程语言基本上是适用于单机系统的。网络计算的另外一个特色就是代码可以在网络上传播,可以再各个计算机上正常的运行,无论这台计算机是什么操作系统,什么硬件设施。这就迫切要求一种跨平台的编程语言的,java语言就应运而生。Java语言的各种特性让它获得了巨大的成功。

我们可以想象一下,在pc机下使用windows系统下编写的程序可以直接在Unix系统上运行吗?答案当然是不可能的了,因为程序不认识这个语言啊。程序的执行最终是要转换成计算机硬件的机器指令来执行的。而那些专门为某种计算机硬件与操作系统编写的程序显然是不能直接在其他的计算机上直接的,要运行也行,那么就必须要做移植工作。这是一个做无用功的过程,而且又非常的繁琐。所以一款可以再不同平台下运行的语言的呼声日益增高。Java语言的各种特性也正满足了这一要求。

Java应用与C++语言之后,java是完全面对对象的[1],它吸收了C++语言的所有优点,采取了当初程序员的所熟知的c++和c语法规则,同时又摈弃了c之中的众多不影响内存的部分,可是说java的发展是在c++的基础上改造而来的。

Java编程语言当初的设计目标就是为了跨平台,所以在编写的时候采取的是解释执行的运行环境,在根据不同的平台硬件解释成不同的计算机机器指令,这样就完美的实现了程序的跨平台。而且为了适应网络计算模式的特性,java语言还提供了动态下载机制,程序可以把自己需要的代码动态的从网络上下载到本地的服务器中执行,这个机制在这个语言之前没有一种语言能够实现这点。

1.3.1 java的网络应用

在和网络通信方面,客户端和服务器的数据交换方式主要是可以分为两种情况:一是Http通信,一是Socket通信。它们的两者的区别在于:http使用的是请求响应模式,即请求时建立连接,连接之后客服端发送请求服务器端才能返回请求的数据。Socket通讯是在双方建立连接通讯通道之后直接进行数据的交换,服务器端可以主动推送数据到客服端,不需要请求才返回数据。那么,什么是socket?Socket连接我们可以理解成是套接字连接,它的工作原理是通过监听网络上面的一个端口号创建一个通信信道来进行数据的传输。socket的主要特点有数据丢失率低,使用简单且易于移植。

我们可以理解Socket就是一种抽象层,应用程序可以通过这个抽象层来收放数据,因此我们可以使用Socket将程序添加到网络上面,和在同一个网络中的其他设备进行通讯。

2

烟台大学毕业论文(设计)

Socket不同的实现方式是根据它底层使用不同的通信协议。在本项目中运用的是基于TCP/IP协议的,在这个协议里socket的主要类型为流套接字和数据报套接。我们可以理解为流套接字就是tcp协议,它将tcp作为接口协议,提供一个字节流的服务。当然除了tcp协议还有UDP协议,即数据报协议,它的工作原理是把数据直接打包发送的,不需要建立连接只要知道目的地址就好了。 下面,我们来认识一下这两种Socket类型的基本实现模型。

图1.1 TCP通信过程

图1.2 UDP通信过程

1.3.2 socket通信原理 (1)基于TCP协议的Socket

首先在服务器端里要先声明一个ServerSocke对象并且要指定端口号,这个端口号要是系统没有使用的,或则不能进行通信。然后调用Serversocket的accept()方法,监听客服端发送的消息。而accept方法在没有进行数据接收的时候是一种处于等待的状态,也就是一直监听客服端的消息在等待。一旦客服端有数据传输过来的时候,通过

3

烟台大学毕业论文(设计)

inputstream对象来读取socket里面的数据进行处理和转发。

其次要在客服端创建一个socket对象,这里当然也要指定端口号,这个端口号和服务器的端口号要一样,还需要指定服务器端的ip地址(socket socket=new scoket(ip,port)), 最后将这些要发送的数据使用outputstream发送,这样就可以使用TCP协议进行socket数据传输了。

(2)基于UDP协议的数据传输

服务器端首先创建一个DatagramSocket对象,并且指点监听的端口。接下来创建一 个空的DatagramSocket对象用于接收数据(data,data.length)),使用DatagramSocket的receive方法接收客户端发送的数据,receive()与serversocket的accepet()类似,在没有数据进行接收的处于堵塞状态。

客户端也创建个DatagramSocket对象,并且指点监听的端口。接下来创建一个 InetAddress对象,这个对象类似与一个网络的发送地址如下:

(InetAddressserveraddress=InetAddress.getByName(\)创建一个要发送的数据的字符串数据,并且创建一个DatagramPacket的对象,还要确定的是要发送的网络的ip地址和端口号,当然最后我们要发送这个数据,使用DatagramPacket的send()发送。

1.4 Mysql简介

Mysql是当前的一个小型的数据库软件,它是开源的,它是由MysqlAB独立开发的并且负责维护这个数据库软件的后期支持,这里稍微提及一下MysqlAB,它是一家基于sql开发的商业软件公司,它使用了一种新的成功的商业模式来结合开源的价值来二次开发的开源公司。

1.4.1 Mysql的优点

(1)Mysql的一个数据库是一个结构化数据的集合。

Mysql服务器它支持很多系统的使用,比如支持关键任务、重负载生产的系统的应用,它可以内嵌到其他大型的软件里面使用。

Mysql是一个多线程的,多用户的sql体系的数据服务器。 Mysql的数据库存储的类型可以是一个简单的表,也可以是一个图书馆的所有的数据集合、或者是一个集团的庞大的信息集合。我们有存储数据集合的地方当然也是需要有一个能够添加、访问和管理数据集合的数据库管理软件系统。Mysql数据库管理软件就是这样一个系统,它可以很好的支持多个用户的数据操作与访问并且每个用户都是独立的并发的进行。

(2)MySQL是一个关系数据库管理系统。

所谓的关系型数据库就是把数据都存放在不同的独立的表格里面,这样做的好处就是方便我们管理和使用数据库查询与管理,提高了数据库管理的灵活性。

(3)MySQL是开源的,对外开放的。

开源也就是说所有的人都可以使用该系统,还可以修改MySQL的软件源码,对它进

4