ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:265.47KB ,
资源ID:21800821      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21800821.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java课程设计网络即时通信系统Word文件下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java课程设计网络即时通信系统Word文件下载.docx

1、IntNo2Nickname用户的昵称Char3Password用户的密码4Status用户在线否Bit5Ip用户的IP地址Yes6Info用户的资料Varchar7Pic用户的头像号8Sex用户性别9Email用户的E-mail10place用户的籍贯课程设计说明书 NO.3 表2 用户的好友表(表名friend)Friend好友的号码2.3服务器的设计2.3.1主服务器的设计 主服务器类实现了服务器端的多线程,即使用ServerSocket s=new ServerSocket(8080)语句在8080端口创建套接口;使用new ServerThread(socket)语句创建新的线程。主

2、服务器类调用ServerThread类,而每个ServerThread实体就是一个单独的线程,即对应于客户端连接请求响应的线程。服务器有一个进程(或多个线程)在指定的端口等待客户的连接信息,一旦连接成功,就可以按设计的数据交换方法和格式进行数据传输。客户端只在需要的时候向服务器端发出连接请求。实现代码如下:Public class Server Public static void main(String args )throws IOException ServerSocket s=new ServerSocket(8080);System.out.println(“Server start

3、.”+s); try while(true) Socket socket=s.accept( );System.out.println(“Connectino accept:”+socket);try new ServerThread(socket);catch(IOException e) Socket.close( ); finally s.close( ); 课程设计说明书 NO.42.3.2 ServerThread类的设计import java.io.*;import .*;import java.sql.*;import java.util.Vector;class ServerT

4、hread extends Threadprivate Socket socket;private BufferedReader in;private PrintWriter out;int no;public ServerThread(Socket s)throws IOExceptionsocket=s;in=new BufferedReader(new InputStreamReader(socket.getInputStream();out=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputSt

5、ream(),true); start( ); 2.3.3登录验证 如果客户端输入的字符串表示需要登录,那么服务器在接受到该信息后连接数据库,准备从数据库选择昵称和密码。服务器接收到客户端发送过来的号码和密码信息后,设定数据库查询条件,并执行数据库查询,通过比较输入的用户名和密码和数据库信息来确定用户的登录是否成功。通知好友也是在run函数中实现的服务器功能。服务器首先连接数据库,再根据“我的号码”从好友表中得到我的好友列表,然后利用广播通知他们我已经上线了。实现代码:略。2.3.4新建用户新建用户是网络聊天工具的一个基本功能。用户新建过程也在线程监听函数run()中。新建用户的过程是这样的:

6、首先要使用Class.forName方法加载数据库驱动类,该类的描述是sun.jdbc.odbc()dbcDriver;然后使用DriverManager.getConnection方法连接数据,数据库名为jdbc:odbc:javaicq;最后服务器接收客户端用户发送的昵称、密码、用户E-mail、个人资料、籍贯和头像等信息,执行数据库添加操作完成用户的创建。服务器为新建的用户制定唯一的注册号码,并将号码以即时消息的方法发送给用户。课程设计说明书 NO.52.3.5好友处理 a.查找好友:当客户端向服务器端发送查找好友的请求后,服务器立即响应并调用Class.forName方法加载数据库驱动

7、类sun.jdbc.odbc.JdbcOdbcDriver,然后调用方法DriverManager.getConnection完成数据库的连接,得到用户好友查询的结果。查询结果包括:好友的昵称、性别、籍贯、个人资料等信息。服务器对数据库的查询结果进行筛选,只向客户端的用户返回好友的注册号码、头像信息及是否在线信息。客户端接收到查询结果后,利用效能感应的函数将其显示出来。 b.读取资料:读取资料功能是在查找好友功能基础上建立的,用户得到好友列表后,可根据需要读取好友的详细资料,也可以读取用户自己的详细资料。服务器使用Vector矢量保存客户端用户的好友号码,并返回好友的昵称、号码、IP地址、状态

8、、头像和个人资料等信息。 c.添加好友:服务器响应客户端用户的请求后,首先连接数据库,并根据接收的用户号码及好友号码向好友表添加记录。服务器使用哪个r6保存查询结果。若r6为1,则表明添加好友成功,服务器将给客户端发出“ok addfriend”的消息;否则添加好友失败,服务器将给客户端发出“false addfriend”的消息。 d.删除好友:当服务器接受到客户端的删除好友请求后,它连接数据库,并根据接收的用户号码及好友号码将好友表记录删除。服务器利用r7保存删除结果,若r7为1,则删除好友成功,服务器给客户端发出“ok delfriend”的消息;否则删除好友失败,服务器给客户端发出“f

9、alse delfriend”的消息。好友处理实现代码: 2.3.6退出下线 用户在线时,数据库表的IP地址字段为此时用户计算机的真实IP地址,状态字段为1.若用户退出下线,服务器只需是完成修改IP字段和状态字段即可。服务器首先利用Class.forName方法加载数据库驱动类sun.jdbc.odbc.JdbcOdbcDriver;然后通过方法DriverManager.getConnection连接数据库,最后根据用户号码,将其状态字段设为0,IP地址字段为空。2.4客户端的设计客户通过Socket与服务器建立连接,服务器与客户都通过构造BufferedReade、PrintWriter来

10、建立输入/输出流来相互传递信息。一旦收到客户方的连接请求,服务器利用accept()函数返回一个新建的Socket对象,随后客户端向服务器发送消息,诸如注册、登录和查找好友等请求,服务器收到请求后,针对不同的消息处理请求。在这一过程中,服务器端与客户端采用UDP协议通信。虽然UDP协议不可靠,但是对于聊天工具而言,可靠性并不太重要。课程设计说明书 NO.62.4.1用户注册 当服务器收到用户的注册请求后,开始接收客户传递的信息,诸如客户的昵称、性别、籍贯、头像和个人资料等信息。接收完毕后,服务器便通过JdbcOdbc与后台数据库连接,向数据库添加记录,其流程如图3所示。若新用户注册,则向客户返

11、回号码,并在数据库中注册用户的IP地址,设定Status值告知用户在线(Status设为1)。客户收到服务器返回的信息后,打开主程序窗口,同时创建UDP以便在用户之间建立联系。注册事件处理,这是处理客户端的主要部分。Java事件包括键盘事件、鼠标事件和按钮等事件。而所使用到的是鼠标事件实际就是点鼠标按钮时,系统会调用监听器,包括mousePressed,mouseReleased,mouseClicked。监听及处理流程如图4所示。 图3 新用户注册过程课程设计说明书 NO.7图4 事件监听流程 用户注册的界面设计:用户注册界面使用了JDialog类。在Java Swing编程中,程序员还可以

12、通过集成JDialog类来自定义对话框。用户注册界面如图5所示,用户在线注册界面上填写自己的注册资料,其中必须填写的内容是用户昵称和密码:可选的内容包括电子邮件、头像、性别、籍贯和留言等。填写完注册信息后,单击【确定】按钮建立一个新用户。若单击【取消】按钮,则放弃注册。课程设计说明书 NO.8 图 5 注册界面运行结果2.4.2用户登录监听登录事件:用户在客户端程序中输入用户号码和密码,与服务器建立连接,向服务器发送登录请求。服务器收到该请求后,通过JdbcOdbc读取数据库,与用户输入的信息做比较:若用户输入的信息与数据库信息相同,则服务器向客户返回成功消息,将其Status字段设为1,并注

13、册用户当前所使用的IP地址;否则服务器向客户返回失败消息。客户端收到服务器的成功确认后,打开聊天主窗口;否则弹出失败信息。客户端的事件驱动与服务器端的时间监听相对应。Java的图形用户界面是由事件驱动的,并利用各种各样的监听器负责捕捉这些事件,因此要为某一个组件的某种事件添加监听器。登录事件处理:完成不同事件监听器的添加后,需根据用户的登录类型具体编程控制登录事件的处理过程。客户端的事件监听器监听到某个事件后,会自动调用相关的方法。这些方法只需要重载就可以处理相应的事件了。界面设计:界面设计主要用到了Jframe类,它也是属于Swing设计类别。所有JFrame的基类,有一个标题为参数的构造函

14、数,缺省关闭操作为系统退出,JFrame就是Windows的子类框架,是Java图形用户界面的基础,它就是我们通常所说的窗口,是Windows/XWindow应用程序的典型特征。界面设计实现代码:登录界面如图6所示。用户向登录界面输入用户号码、密码、服务器地址名和端口。服务器地址和端口应该是事先知道的,如果服务器有自己的域名,也可输入域名。正确填写登录信息后,单击【登录】按钮,密码验证正确后完成登录过程。课程设计说明书 NO.9图 6 登录界面2.4.3主程序设计 用户完成登录后,客户端与服务器端建立连接。连接建立成功后,客户向服务器请求读取好友名单;服务器收到该请求,开始读取数据库中的fri

15、end表并得到好友的号码,再通过icq表读取好友资料,向客户端发送这些信息;客户收到服务器信息后,在主窗口显示好友(即好友的头像和昵称)。客户端还建立矢量(Vector)来存储好友昵称、jicq号码、头像编号和IP地址等信息。主程序利用MainWin类实现,首先要定义成员变量,主程序构造函数用来生成MainWin类的实例(对象)、设置大小并显示,其实现代码如下:public class MainWin extends JFrame implements Runnablepublic MainWin(int s,String sername,int serport) enableEvents(A

16、WTEvent.WINDOW_EVENT_MASK); myjicq=s; server=sername;serverport=serport ;jbInit();ConnectServer(myjicq);CreatUDP();Findf=new FindFriend2(myjicq,server,serverport);Findf.setBounds(200,150,300,300); Thread=new Thread(this); Thread.start(); Catch(Exception e) e.printStackTrace();课程设计说明书 NO.10 主程序窗口设计:主

17、程序窗口需要添加两个监听器,它们分别用来监听窗口关闭事件和窗口激活事件。主程序窗口类继承了JFrame类,其可能发生的窗口事件包括: windowActivated(WindowEvent e):窗口得到焦点时触发; windowClosed(WindowEvent e):窗口关闭之后触发;windowClosing(WindowEvent e):窗口关闭时触发;windowDeactivated(WindowEvent e):窗口失去焦点时触发;windowOpened(WindowEvent e):窗口打开之后触发;主程序窗口是通过在JFrame对象中添加AWT或者Swing组件而完成的。

18、但是,JFrame不是一个容器,只是一个框架,在其对象中添加组件需要利用其他的办法。JFrame有一个内容面板(Content Pane),可将窗口的所有组件都添加在这个面板上,并利用JFrame提供的getContentPane和setContentPane犯法完成指定面板的设置。这样通过面板可在JFrame对象中添加所需的组件。窗口实现代码:服务器连接:服务器连接是在ConnectServer()函数中实现的。本函数用到了具有连续性、有序性特点的流(Stream),根据服务器的IP地址和端口来完成客户端与服务器端的连接。IP地址是网络中唯一的地址标识。服务器连接过程分服务器端和客户端两个部

19、分,执行流程如下: 服务器程序流程: 程序初始化; 填写本机地址信息; 绑定并监听一个固定的端口; 收到Client的连接后建立一个Socket连接; 产生一个新的进程与Client进行通信和信息处理; 子通信结束后中断与Client的连接。客户端程序流程: 填写服务器地址信息; 连接服务器; 与服务器通信和信息处理; 通信结束后断开连接。2.4.4消息通信的设计 创建数据报:消息的收发主要是通过数据报服务实现的。Java实现数据报通信的过程除了面向连接的Socket外,还有无连接的数据包Socket。数据报是网络层数据单元在介质上传输信息的一种逻辑分组格式,它是一种在网络中传播的、独立的、自

20、身包含地址信息的消息,它能否到达目的地,到达时内容是否会变化是不能准确知道的。数据报的通信双方不需要建立连接,对于像聊天通信这些不需要很高质量的应用程序来说,数据报通信是一个非常好的选择。课程设计说明书 NO.11首先,通信双方要建立数据包通信的Socket。可以通过创建一个DatagramSocket对象来实现它,其构造方法为:Public DatagramSocket()构造一个数据报Socket,并使其与本地主机任何一个可用的端口连接。若打不开Socket则抛出SocketException异常。 然后,处理接收缓冲区内的数据,获取服务结果。 最后,当通信完成后,可以使用Datagram

21、Socket对象的close()方法来关闭数据报通信Socket。当然,Java自己会自动关闭Socket,释放DatagramSocket和DatagramPacket所占用的资源。 发送消息:用户通过在好友列表中好友的IP地址,利用UDP协议与其他用户进行信息交流。消息发送之前先创建一个数据报文包,用来实现无连接的包传送服务。每个数据报文包是用DatagramPacket类来创建的,DatagramPacket对象封装了数据报包数据、包长度、目标地址和目标端口。若客户端要发送数据报文包,则构造函数创建DatagramPacket对象,将需要发送的数据和包文目的地址信息放入对象之中。 图 7

22、 发送消息流程在发送的过程中利用构造函数DatagramPacket(byte bufferedarray,int length,InetAddress address,int port)构造了一个包长度为length的包,它是一个将数据传送到指定主机指定端口号上的数据报文包,参数length必须小于等于bufferedarray .length。消息发送是通过调用DatagramPacket对象的send方法实现的,它需要以DatagramPacket对象为参数,将刚才封装进DatagramPacket对象中的数据组成数据报发出。 Void send_mouseClicked(MpiseEv

23、ent e)课程设计说明书 NO.12 String s=sendtext.getText().triim(); Bytedata=s.getBytes(); System.out.println(theip); Theip.trim(); If(theip.equals(“null”)|theip.equals(“ “)|theip.equals(“0“) ) JOptionPane.showMessageDialog(this “:-(对不起,不在线”,”ok”,JOptionPane.INFORMATION_MESSAGE); else sendPacket=new DatagramPa

24、cket(data,s.length(),InetAddress.getByName(theip),send(Port); sendSocket.send(sendPacket); catch(IOException e2) Semdtext.append(sendtext.getTet(); e 2.printStackTrace(); Senddata.dispose(); 监听好友的消息:监听好友的消息与QQ好友上线监听功能非常相似。系统首先定义一个空数组,该数组用于接受消息中的数据,然后创建数据报,使用receiveSocket.receive(receivePacket)函数等待接收

25、数据报,取得数据报中的数据。根据取得数据的类型,监听器将判定好友是否上线:若有好友上线,则好友的头像变色,若有好友下线,则好友的头像变为灰色。 接收消息:DatagramPacket类提供了4个函数来获取消息: Public bytegetData():返回一个字节数组,包含收到或要发送的数据报中的数据; Public int getLength():返回发送或接收到的数据的长度; Public InetAddress getAddress():返回一个发送或接收此数据报报文的机器的IP地址; Public int getPort():返回发送或接收数据报的远程主机的端口号。为了接收从服务器返

26、回的结果数据报文包,需要建立一个新的DatagramPacket对象。系统可调用DatagramPacket对象的receive()函数来接收数据报,并将DatagramPacket对象作为该函数的参数。receive()方法会一直阻塞直至收到一个数据报文包,而该数据存放在DatagramPacket对象的缓冲区中。数据报文包还包含了发送者的IP地址和端口号等信息。2.4.5好友管理 查找好友:好友查找可利用FindFriend2类来完成,FindFriend2类继承自JFrame类。FindFriend2中定义的界面控件包括:好友的昵称、性别、主旨、jicq号码、IP地址、在线状态、头像、电

27、子邮件和个人留言等信息。课程设计说明书 NO.13查找好友所需的网络变量定义如下: Socket socket:连接Socket; BuffereReader in:读入缓冲区; PrintWriter out:输入缓冲区; Int myid:用户的号码; String serverhost:发送端的主机地址; Int servport:服务端的主机地址; DatagramPacket sendPacket:存储发送信息的发送数据报; DatagramSocket sendSocket:存储接收信息的接收数据报; int sendPort:发送的端口号。查找好友实现代码:添加好友:用户添加好友是聊天工具的基本功能之一。添加好友的基本步骤如下: 用户登录后,向服务器发送查找请求,服务器响应并读取数据库表icq,将结果返回给用户; 用户在收到查询结果后选择用户B,向服务器发送添加好友请求,服务器收到请求后响应,更新数据库表friend,并从icq表中读取好友基本信息,将信息返回给用户A; 用户A的客户端主窗口显示用户B,并通过UDP通知用户B; 用户B收到服务器的确认消息,可决定是否添

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1