基于java的仿qq聊天程序的设计与实现(论文).doc_第1页
基于java的仿qq聊天程序的设计与实现(论文).doc_第2页
基于java的仿qq聊天程序的设计与实现(论文).doc_第3页
基于java的仿qq聊天程序的设计与实现(论文).doc_第4页
基于java的仿qq聊天程序的设计与实现(论文).doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

存档编号_ x x 师 范 学 院 学 士 学 位 论 文基于Java的仿QQ聊天系统的设计与实现目 录内容摘要:1关键字:1Abstract:1Key words:11. 引言22. 系统分析22.1可行性分析22.2需求分析33. 总体设计113.1功能模块图113.2数据库设计123.3类图184. 详细设计及实现194.1界面设计194.2数据输入输出设计234.3代码实现245 系统测试315.1注册测试315.2登陆测试315.3私聊测试325.4群聊测试335.5文件传输测试346 总结35参考文献37 内容摘要:计算机网络的迅速发展,对人类社会诸多领域产生了巨大的影响。尤其是,随着信息时代的来临,人们之间愈来愈趋向于通过网络来交流和传递信息。而聊天系统正是当前人们使用最多的中介。在这个平台上,许多认识或不认识的人们彼此间能够随意的相互交流。因此,开发和架构这种平台符合时代发展的需要。本系统在开发中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。关键字: Socket;服务器端; 客户端; 连接(connection) Abstract:The rapid development of the computer networks has been making a great influence in many fields of human society. In particular, along with information age approaching, between the people tend to increasingly in exchanges and the transmission information through the network. But chats the system is precisely the current people uses many intermediary,。In this platform, people each other which many understanding or did not know can at will mutual exchange. Therefore, the development and overhead construction this kind of platform conforms to the time need to develop.This system with the LAN correspondence mechanism principle, through inheritting the Thread kind to establish the multithreading directly. In the development, it uses the elementary theory knowledge which the computer network programmes. for example, TCP/IP agreement, Client/Server pattern, network programming design method and so on. In the network programming, it realizes reading and transmission of the information, that is, informaton flows realize the information exchange, introduce information flow analysis for realizing a system, in which containes some basic software engineering methods.Key words: Socket ; server ; client ; connection1. 引言当今主流的聊天工具有QQ,ICQ,MSN Messenger,Yahoo Messenger等,国内最热门的当属QQ,腾讯QQ(OICQ)是由深圳市腾讯计算机系统公司开发的,基于Internet的即时寻呼软件。您可以使用QQ和好友用户进行交流,信息即时发送,即时回复,收发及时、功能全面。此外QQ还具有BP机网上寻呼、聊天室、传输文件、语音邮件、手机短讯服务等功能,QQ不仅仅是虚拟的网络寻呼机,更可与传统的无线寻呼网、GSM移动电话的短消息系统互联,目前QQ和全国多家寻呼台、移动通信公司有业务合作。是国内不可多得的中文网络寻呼机。QQ支持显示朋友在线信息、即时传送信息、即时交谈、即时发送文件和网址。QQ可以在Win95/98/NT/2000操作系统下运行,是十分灵活的网络寻呼工具。它会自动检查您是否已联网,如果您的电脑已连入Internet,可以搜索网友、显示在线网友,可以根据QQ号、昵称、姓名、email地址等关键词来查找,找到后可加入到通讯录中。当您的通讯录中的网友在线时,QQ中朋友的头像就会显示在线,根据提示就可以发送信息,如果对方登记了寻呼机或开通了GSM手机短消息,即使离线了,您也可及时将信息传递给您的好友。虽然以上这些软件是免费的,并且功能越来越强大。但是它们的唯一的不足就是必须要联网或者下载到它们的服务端,要不然是没法脱离Intenet使用的。为了能在一个没有连接到Intenet的局域网使用聊天工具,那就必须要有服务器端。本系统就是包括服务器端与客户端,可以在局域网聊天的一个工具。2. 系统分析2.1可行性分析1)经济可行性:本系统需要一个oracle数据库服务器,由于使用人数比较少,安装一个免费的oracle数据库完全可以应付需要,所以成本就不用考虑了。 2)操作可行性:只要一台以上计算机连接在同一个局域网内,本系统就可以安装使用,所以操作上完全不存在问题。 3)技术可行性:本系统采用Java语言,是基于CS架构的。开发这个系统需要开发者对socket编程和java Swing这两方面的技术比较熟。由于本人长期从事于java语言编程,所以技术方面是可行的。2.2需求分析2.2.1功能分析本系统要实现的功能如下:1)注册服务器收到用户的注册请求,便开始接受客户传递的信息,诸如客户的呢称,性别,籍贯,个人资料等,接受完毕后,便通过Jdbc-Odbc与后台数据库连接,然后向数据库添加记录,如果成功,便向客户返回其号码。客户收到服务器返回的信息后,便打开主登陆窗口。2)登陆在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过JdbcOdbc读取数据库,然后与用户输入的信息比较,如果成功,便打开主程序窗口。然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的表,得到好友的号码后,再在icq表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个矢量(Vector)用以存储好友的呢称,号码。3)私聊私聊就是两个聊天。客户端首先发送消息到服务器端,服务器端根据发送人信息和接收者信息来转发。例如服务器接收到一个A发给B的消息,先判断B是否已经在线,如果在线就将信息发送过去。B接收到A发来的信息,如果是未建立对话窗口,就询问是否建立对话,否则就丢弃信息。4)群聊群聊,就是多人一起聊天。过程与私聊差不多。唯一的不同就是服务器会将信息转发给指定群的所有成员。5)创建分组用户注册以后默认的好友分组只有一个。用户在执行添加分组操作以后,客户端分将一个这个动作的信息发送给服务器端(主要是FromClientlisten)。服务器端的fromClientListen接收到这个请求,会进行数据库操作,将要添加的分组信息插入到数据库中。如果成功,则返回这个分组的信息给客户端,否则返回错误提示信息。6)创建群用户注册以后群个数为0。用户在执行添加群操作以后,客户端分将一个这个动作的信息发送给服务器端(主要是FromClientlisten)。服务器端的fromClientListen接收到这个请求,会进行数据库操作,将要添加的群信息插入到数据库中。如果成功,则返回这个群的信息给客户端,否则返回错误提示信息。7)查找好友并加为好友输入要查找的用户ID号,客户端发送一个查询信息给服务器端,如果找到就返回用户服务信息。打开一个用户信息显示界面,该界面会提供一个“添加为好友”按钮,点击后可将此人加为好友。如果未找到,弹出一个信息提示框。8)查找群并加入群输入要查找的群ID号,客户端发送一个查询信息给服务器端,如果找到就返回用户服务信息。打开一个群信息显示界面,该界面会提供一个“加入此群”按钮,点击后可将此人加为好友。如果未找到,则弹出一个信息提示框。9)文件共享在启动文件传输服务器的共享文件功能之前,要设置它的IP号和端口,如果设置不好。好友将无法下看到这些共享的文件。还有一个重要的步骤就是添加共享文件或目录。最后启动文件共享。10)下载文件使用文件传输的客户端要正确配置好服务器的IP和端口号,以及下载好的文件的存放目录。如果其中之一配置不好,文件下载将会失败。设置好以后,点击“连接”按钮,如果配置正确,这时将会看到服务器共享的文件。目前不能支持文件夹下载,当看到一个文件夹以后,可以双击该文件夹并查看文件夹里面的文件。2.2.2性能分析本系统由于采用免费的oracle数据库软件,连接数最多不能超过200,所以并发访问数据库的人数不能超过200人。2.2.3用例图图2-1系统用例图2.2.4时序图客户登陆、注册时的服务器端时序图 图2-2注册、登陆时的服务端的时序图本图说明:服务器接每次与一个客户连接以后,就会去创建一个监听线程。通过线程来接收客户端发送的所有数据。如果要查询数据库,监听线程会请求获得一个数据库连接.如果数据库连接已经获得,就把连接交给DBOperation对象,通过此对象可以返回给监听线程必要的结果。最后监听线程会通过Socket将结果返回给客户端。2.2.5活动图1)用户登陆活动图图2-3用户登陆活动图本图说明:首先填写登陆信息,提交以后服务器会对用户名和密码进行验证。如果不正确,返回一个提示信息。如果登陆成功,就更新在线状态。通知所有好友自己已经上线。2)客户之间的通信活动图图2-4客户通信活动图本图说明:短消息发送以后,服务器端对应的监听线程会接收到一个数据包。此包中包含接收者的信息,如果接收者在线,数据包将会转发到接收者。如果不在线,就写入数据库。3)客户之间的文件传送活动图 本图说明:客户端向服务器发送文件下载请求。如果服务器端同意下载,就读取文件流并将数据流写入到客户端。客户端读取到文件名之后,立刻创建一个新的文件并将读取的数据写入到文件中。客户端 服务器端发送要要下载的文件名创建服务器端监听线程读取文件流并发送到客户端查找文件客户端监听器创建文件并将数据流写入文件服务器端图2-5文件传送活动图4)新增好友活动图根据好友ID号查找好友,如果此ID存在,就将用户信息发送到客户端。同时将好友关系写入到数据库。客户端服务器端是否存在用户资料填写搜索好友请求监听端口(监听线程)查询数据库返回找到用户资料监听端口(监听线程)写入数据库显示查找的客户资料加为好友请求更新好友列表图2-6新增好友活动图5)删除好友活动图此图说明:客户向服务器发送删除好友请求。服务器接收到删除好友请求以后,将好友关系从数据库中删除。客户端服务器端删除好友请求监听端口(监听线程)更新数据库更新好友列表图2-7删除好友活动图3. 总体设计 3.1功能模块图本系统主要由由两个子系统组成:1)文件传输系统;2)聊天子系统。对于肾虚和早泄,中医治本, 西医治标。 中医治缓 , 西医治急,这个病必须用中医治疗,我认识一位马老中医,口碑不错,你找他问一下,他微|杏是:msdf003文件传输系统的功能主要有:1)共享文件;2)查看并下载文件。聊天子系统的功能有:1)注册;2)登陆;3)添加群;4)查找群5)私聊;6)群聊;7)查看好友资料;8)查找好友;9)添加好友;10)创建好友分组。JICQ(javaQQ通信系统)通信(聊天)文件传输注册登陆私聊群聊查看好友资料查找好友添加好友查找群添加群创建好友分组共享文件查看共享文件并下载图3-1系统功能模块图3.2数据库设计3.2.1 E-R图QQ用户表ID账号密码个性签名头像好友分组ID用户ID号分组名用户分组用户群ID分组ID用户IDID群ID用户ID拥有创建拥有创建1111n1n群ID创建人ID群名群公告11留言ID发信人ID收信人ID拥有内容n图3-3系统E-R图用户表(QQUser):属性:id,account(登陆账号),pwd,nickname,sign(个性签名),sex,email,head(头像)关系: 一个用户可以有多个好友分组。 一个用户可以有多个群。 一个用户可以有多条留言。好友分组表(Qqperson_group):属性:id,userid(创建者ID),name(分组名) 关系:一条记录只对应一个用户,但是可以拥有多个组成员。群表(Qqpublic_group):属性:id,userid(创建者ID号),name(群名),sign(群公告)关系:一个群只有一个创建者,但是可以拥有多个群成员。图3-4系统各表之间的联系图3.2.2表结构设计表3-1 客户信息表(qquser)1自动id号Id整数2用户账号Account整数3用户密码Pwd字符4用户昵称Nickname字符5用户签名 sign字符6用户性别Sex字符7用户邮箱email字符8用户头像Head字符表3-2 Qq消息表(QQMessage)1自动IDID整数2发信人Account_from整数3收信人Account_to整数4发送内容Content字符表3-3 用户分组表(qqpersongroup)1自动IDID整数2拥有者Iduserid整数3分组名称name字符表3-4 公共群表(qqpublic_group)1自动IDID整数2创建人userid整数3群名称name整数4群的公共消息sign字符表3-5 用户与群的中间表(qquser_publicgroup)1自动IDID整数2加入的群IDgroupid整数3加入的用户的IDuserid整数表3-6 用户与分组的中间表(QQuser_persongroup)1自动IDID整数2加入的分组的idgroupid整数3加入分组的用户的iduserid整数以上各表创建的代码如下:1)创建用户表create table qquser(number primary key,account number unique,nickname varchar(100),sign varchar(500),sex varchar(10),email varchar(100),head varchar(200);2)创建分组表create table qqperson_Group(id number primary key,userid references qquser(id),name varchar(100);3)创建群表create table qqpublic_group(id number primary key,userid number references qquser(id),name varchar(100),sign varchar(800);4)创建消息表create table qqmessage(id number primary key,account_from number,account_to number,content varchar(1000);5)创建用户与群的中间表create qquser_publicgroup (id number primary key,groupid number references qqpublic_group(id) ,userid references qquser(id););6)创建用户与分组的中间表create qquser_persongroup(id number primary key,groupid number references qqpublic_group(id) ,userid references qquser(id);7)为用户表插入数据insert into qquser values(1,1,long,Im long,male,,48.gif);insert into qquser values(2,2,a,aa,male,,48.gif);insert into qquser values(3,3,b,bb,male,,48.gif);insert into qquser values(4,4,c,cc,male,,48.gif);insert into qquser values(5,5,d,dd,male,,48.gif);8)为分组表和群表插入数据insert into qqperson_group values(1,1,my friend);into qqpublic_group values(1,1,ha ha,my new group);9)为用户与群中间表插入数据insert into qqperson_group(1,1,1);insert into qqperson_group(1,1,2);insert into qqperson_group(1,1,3);insert into qqperson_group(1,1,4);insert into qqperson_group(1,1,5);10)为用户与分组中间表加入数据insert into qqpublic_group(1,1,1);insert into qqpublic_group(1,1,2);insert into qqpublic_group(1,1,3); into qqpublic_group(1,1,4);insert into qqpublic_group(1,1,5);3.3类图图3-2系统类图Socket:非自定义类,.Socket。Thread: 非自定义类,java.util.Thread。Client:负责具体发送和接收数据。FromServerListen:监听服务器是否在发送数据。MainFrame系统的主界面(包括用户列表等)。QQUserInfo包括用户的好友分组信息和群信息。QQUserClass包括用户的个人信息,如ID、用户名等。4. 详细设计及实现4.1界面设计 1)登陆界面本界面需要填写的有两个,一个是用户账号,另一个是用户密码。在客户端,用户输入其号码和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过Jdbc方式读取数据库,然后与用户输入的信息比较,否则返回错误,如果客户收到成功信息就打开主窗口,否则提示出错。如果成功,便打开主程序窗口。然后客户向服务器请求读取好友名单,服务器收到该请求,开始读取数据库中的friend表,得到好友的号码后,再在好友表中读取好友资料,然后向客户端发送这些信息,客户收到后就在主窗口显示好友,并且建立几个Vector用以存储好友的信息。图4-1 登陆界面图2)注册界面本界面要填写的项目包括:用户昵称,密码,邮件地址,个性签名。需要选择的项目包括:性别,头像。本界面主要负责将用户的信息包装成一个QQUserClass对象。注册按钮一旦被点击,就会试图创建一个与服务器端的连接。连接创建成功就会将填写的信息发送到服务器端。如果服务器写入数据库成功,就回返回一个账号。使用这个账号,用户可以登陆到系统中。图4-2 注册界面图3)主界面主界面是系统的核心部分。它可以列出所有好友和客户所有加入的群,也可以提供共享文件和文件下载功能。如果用户服务双击好友分组或群,好友列表或群成员列表将会显示出来。双击一个好友,可以与他进行私聊。双击一个群成员,可以与群里的所有成员对话。本界面还提供了以下右键菜单:添加好友分组、查找好友并加为好友、查找群并加为群、创建群、移动好友到其它分组、查看好友资料、查看群资料。图4-3 系统主要界面图4)个人资料界面该界面主要显示某个用户信息,包括用户的账号,昵称,性别,个性签名,用户等级等。本界面还提供了一个“加为好友”按钮,如果点击它,此人将会被加为用户的好友。默认的是加到第一个好友列表,不过也可以移动其它好友分组。图4-4 查看好友资料图5)文件传输服务器端界面该界面使用的步骤为:第一步:设置好服务器的IP,端口。IP一定要是本机的IP,如果是单机测试,IP可以填写“”。端口号尽量不要小于2000,小于两千的端口可能被系统占用。设置完后点击“确定”按钮。第二步:添加共享文件。单击“添加文件共享”按钮,将需要共享的文件或文件夹添加到共享列表中。第三步:点击“启动文件发送服务”。第四步:如果共享文件完毕,需要点击“退出”。图4-5 文件传送服务器6)文件传输客户端界面使用文件传输的客户端要正确配置好服务器的IP和端口号,以及下载好的文件的存放目录。如果其中之一配置不好,文件下载将会失败。设置好以后,点击“连接”按钮,如果配置正确,这时将会看到服务器共享的文件。目前不能支持文件夹下载和多文件下载,当看到一个文件以后,可以双击该文件夹并查看文件夹里面的文件。图4-6 文件传送客户端7)私聊界面本界面主要用来显示两个人的对话信息以及发送信息。发送的信息可以设置字体,大小,字体颜色。也可以发送一个QQ表情。图4-7私聊界面图8)群聊界面本界面主要用来显示多人的对话信息以及发送信息。发送的信息可以设置字体,大小,字体颜色。也可以发送一个QQ表情。右边显示的是群公告,可以用来公布一些必要的信息。图4-8群聊天界面4.2数据输入输出设计4.2.1数据输入登陆界面数据的输入要求Number(账号)输入的必须是整型,它是一个用户登陆的账号。Password(密码)可以是你设置好的字符串,字符串内容可以随便。如果用户设置不正确,将会导致登陆不成功,系统会弹出相应的对话框。注册界面的输入Nickname(昵称),password(密码),sign(个性签名)可以是任意的字符串。 Email必须是Email地址格式,也就是中间必须含有“”,否则提示输入不正确。共享界面的输入服务器IP:填入本机的IP地址,格式如:53端口号:随便一个可以未被占用的端口都行(最好是2000以上)。4.2.2数据输出用户注册的信息必须写入数据库中。下载的文件存放到的指定的目录中,如果未指定就存放到默认路径中,当默认路径不存在的时候给提示用户路径不存在。4.3代码实现4.3.1服务器端设计 连接池的设计连接池,就是生产一定数量的数据库连接存储在一个容器中,等待程序来索取,当这个容器器中的数据库连接全部被使用完的时候,就立即再产生指定数量的数据库连接。这样做的优点就是可以充分利用资源,减少创建和关闭所带来的资源消耗。在程序中它是以一个集合来存储这些连接的。如果访问的程序过多,而连接又少,连接池可以迅速增加多个连接以供程序需求。如果连接需求量超出连接池所设定的最高值。连接池将不理会程序的请求。连接池主要由以下几个类创建:(1)poolSperties 该文件的内容如下:poolname=QQPooluser=rootpassword=rooturl=jdbc:mysql:/:3306/javaqqdriver=org.gjt.mm.mysql.Driverminconn=5reuse=20maxconn=1000logfile=c:/QQPool.log第一行声明要创建的数据库连接池的名字。第二行是访问数据库的用户名。第三行是访问数据库的密码。第四行是访问(mysql)数据库的url。第五行是声明驱动程序所在的类全名。第六行设定了数据库连接池中最少应保持的连接数。第七行设定了一个连接(Connection)最多可重复使用的次数。第八行设定了连接池是最多创建的连接数。第九行声明了一个日志文件(该日志文件记录的是数据库连接方面的信息)存放的路径。(2)GetPoolSet.java,本程序的主要功能是获取上一配置文件中的信息,并将获得的信息返回给其他程序。由于代码过多,本文并不列出源代码只以表格的形式说明各方法的作用。表4-1 GetPoolSet类的方法说明方法名作用public void setFileName(String fileName1)设置将要访问的配置文件public GetPoolSet()创建一个空的获取配置文件中信息的对象 public GetPoolSet(String fileName1)根据fileName1创建一个能猎取配置文件中信息的对象public String getSet(String name)从配置文件取得信息,并返回给调用程序(3)LogFile.java 本类主要用于记录日志信息,当程序出现异常的时候就会调用此类的方法将出错信息写如日志文件。(4)ConnectionPool.java 本程序主要用于创建数据库连接。表4-2 ConnectionPool的方法说明方法名作用public ConnectionPool(GetPoolSet poolset)构造器,它创建一个ConnectionPool对象public Connection createConnection(GetPoolSet poolset) 真正创建ConnectionPool对象的方法public Connection getConnection()获得连接public void freeConnection(Connection conn)释放连接,返回给连接池public void check()检查连接是否还正常public void release()关闭连接(5)PoolManager.java连接池管理,和对外交互的类,决定连接池的生产与销毁。表4-3PoolManager类的方法的说明方法名作用synchronized public static PoolManager getInstance(String setfile)返回某个连接池的管理对象synchronized public static PoolManager getInstance()返回默认的连接池管理对象private PoolManager(GetPoolSet poolset1)构造器,创建连接池管理对象private ConnectionPool createPool(GetPoolSet poolset)创建连接池public Connection getConnection()获得连接public void freeConnection(Connection connection1)释放连接public void closemypool()关闭连接池public void release()关闭所有的连接池 服务器端监听线程的设计服务器在监听到一个客户以后,它就会创建一个线程去管理这个客户。至于如何去管理这个客户,服务器端不做任何干涉,完全由监听线程决定。监听线程主要对客户端的请求进行响应,做到有求必应。接收到信息后,首先判断该信息是哪种类型,如果是要访问数据库服务器,则直接根据发送信息内容操作数据库。如果是聊天内容,服务器会将该信息再次转发到目的地。这些判断将会全放部在一个线程的run方法中。4.3.2传递包的设计无病一身轻的感觉真好!回顾了一下我艰辛的治疗过程,总结出一个道理:前列腺炎治对路很重要,否则都是在白费功夫。给你推荐一个靠谱的老中医,他的微|杏是:msdf003 就是他把我治好的。由于请求的服务不同,包的类型应该所区别。所以在设计的时候,应该在包中加一个存储包类型的属性并提供设置和获取这个属性的方法。以下就是对包抽象出来的应该有的方法,所有要传输的方法必须实现以下接口中的方法:package javaqq.datagram;import java.io.Serializable;public interface DatagramPacket extends Serializable / define class number for the packet which need to send to otherspublic static final int MESSAGESHOW_PIC_PERSONAL = 1;public static final int MESSAGESHOW_PHOTO = 2;public static final int MESSAGESHOW_WORD_PERSONAL = 3;public static final int MESSAGESHOW_WORD_GROUP = 4;public static final int MESSAGESHOW_PIC_GROUP = 5;/ define class number for the packet which not need to send to otherspublic static final int DATABASEHANDLE_FIND = 11;public static final int DATABASEHANDLE_DEAL = 12;public static final int DATABASEHANDLE_RESULT = 13;public static final int DATABASEHANDLE_FLAG = 14;public static final int USER_INFO = 21;public static final int USER_LOGIN = 22;public static final int USER_REGISTER = 23;public static final int USER_REGISTERINFO = 24;/find infomationpublic static final int FIND_USER=31;public static final int RETURN_USERINFO=32;public static final int FIND_GROUP=33;public static final int RETURN_GROUPINFO=34;public static final int JOIN_GROUP=35;public static final int RETURN_GROUPMEMBERS=36;/ system informationpublic static final int SYSTEM_INFO = 91;public static final int SYSTEM_ON_OR_OFFLINE = 92;public int getType();public Object getData();public long getFromuserid();/ if (getTouerid()=0),then the datapacket will be sended to serverpublic long getTouserid();public String getTalkroomid();服务器在接收包的时候,就调用它的getType()获得type的值,并采取相应的措施。4.3.3聊天客户端设计聊天窗口发送文件文字与图片的代码如下:/发送文字public void insertString(String s, SimpleAttributeSet attributset) Try doc.insertString(doc.getLength(), s, attributset);doc.insertString(doc.getLength(), n, null);showScroll.getVerticalScrollBar().setValue(showScroll.getVerticalScrollBar().getMaximum()+20);showText.setCaretPosition(showText.getDocument().getLength(); catch (BadLocationException e)e.printStackTrace();/发送图片public void insertIcon(String str) String picurl = TalkFrame.class.getResource(pic).getPath()+ File.separator;try ImageIcon icon = new ImageIcon(picurl + str);showText.setCaretPosition(doc.getLength();showText.insertIcon(icon);doc.insertString(doc.getLength(), n, null);showScroll.getVerticalScrollBar().setValue(showScroll.getVerticalScrollBar().getMaximum();catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();4.3.4文件传输设计文件传输客户端设计从Socket中读取数据,并将数据写入到文件中,代码如下: while (!stop) int read = 0;if (getDis() != null) read = getDis().read(buf); / 将数据读入缓冲区,并返回读取数据长度 System.out.println(read + read); ElseSystem.out.println(数据输入流不存在!);break;if (read = -1) fileOut.close();break;System.out.println(read);received += read;System.out.println(写数据一次);/ 将缓冲区中的数据写入文件中fileOut.write(buf, 0, read); / while文件传输服务端设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论