




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浅论基于JAVA的共享白板的设计摘 要随着Internet的迅速普及,计算机技术进入了以网络为中心的时代。在计算机网络的支持下。地理上分布的人们需要协同工作。因此计算机支持协同工作(CSCW)应运而生。人们希望借助协同工作环境以“你见即我见”的方式进行交互。而电子白板作为计算机支持协同工作(CSCW)中的一个重要的图形交互工具,使处于不同地点的用户通过计算机可以实时的进行图形交互,用户简单快速地实现协同工作,业务处理过程,迅速适应市场的变化,从而获得更好的经济效益。本系统将CSCW与Java技术相结合,采用Java语言中的Socket网络编程技术,实现了客户端与服务器端之间网络底层的链接和信息的交换,用C/S计算机模型设计并实现了一个基于Java的电子白板系统,增加网上绘制图功能,弥补了纯文本非实时交流的不足,简化了网络中的技术细节,方便可行。关键词:共享电子白板;CSCW;Java;Socket;Client/Server(C/S)The Design and Implementation of Internet Oriented CSCW Shared Whiteboard AbstractAlong with rapid popularity of Internet, computer techniques come into Network Centric Computing epoch. People who are in geographically distributed locations need to collaborate with each other, so the Computer Supported Cooperative Work (CSCW) springs up. People hope interacting with each other using the WYSIWIS(What You See Is What I See) mode in CSCW environment. The shared whiteboard is the most important tool of graphic interaction in CSCW, which helps people locating different areas to interact each other with graphics by computers. The customers carry out a work, deal with the process of business and adapt a series of variety of the market in a brief and quick way .Then a better and economic performance is acquired.This system combines CSCW with Java technology and carries out the links of the low layer of the networks and switch of the information among the clients and severs using the socket programming technology with java. The design and implementation of the shared whiteboard system based on java adopting the C/S module of computer increases the online drawing function, makes up the shortage of pure text of the no real time and predigests the details of technology in network. So the system is very useful for us.Key words: share whiteboard; CSCW; Java; Socket; Client/Server(C/S)目 录论文总页数:26页1引言12共享电子白板的系统功能结构12.1共享电子白板的主要功能12.2共享电子白板的系统结构13共享电子白板的结构与设计流程23.1共享电子白板信息流设计24.2.1由客户端向服务器端传递的主要消息34.2.2由服务器端向客户端传递的主要消息44.3共享电子白板的设计流程44.3.1服务器端程序设计流程44.3.2客户端程序设计流程55共享电子白板的实现55.1实现共享电子白板的语言和环境55.2服务器端的实现及相关类和方法75.2.1服务器的实现75.2.2服务器实现的相关类和方法95.3客户端的实现及相关类和方法135.3.1客户端实现135.3.2客户端实现的相关类和方法15结 论21参考文献211 引言随着Internet的迅速发展,在Email、WWW、FTP等传统的非实时应用日趋成熟的同时,广大网络用户对在线实时交流的需求不断扩大,如网上会议、远程教学、协同工作等。这方面的应用软件也日益丰富起来。该类软件主要分为两类,一种是以目前和主页上的聊天室为代表的纯文字型的交流工具;另一种就是本文要介绍的电子白板类交流工具。电子白板除了具备聊天室的全部功能外,更重要的是,它还引入了绘画图形交流功能,使网上交流的形象性和直观性大大加强了,弥补了文字交流的不足。当分布在Internet不同位置的用户用白板进行交流时,一个人在自己的白板上绘制的图形可以马上在别人的白板上显示出来,好象大家都在同一块白板上绘画,彼此间的距离感大大缩短了。电子白板技术最初是指多媒体视频会议系统中,与会者通过某个界面实时共享数据并协作的技术。任何与会者在电子白板上的操作,包括简单的图形绘制操作,文字输入操作等,都可以实时地与其他会者共享。更复杂的白板要支持窗口共享以及本地多媒体的链接与嵌入,并且可以将每一个图形实体作为对象保存到文件中。随着WWW的发展以及Browser/Server计算模式的日益流行,Client/Server计算模式也在发展,本人做的面向Internet上的CSCW的共享白板的设计与实现是用Client/Server计算模式做的。电子白板技术已经不仅仅局限于应用在多媒体视频会议系统中了。2 共享电子白板的系统功能结构2.1 共享电子白板的主要功能本软件共享电子白板的功能主要有以下几点:1)支持多用户对图形、文本等的绘制操作功能,如直线、圆、椭圆、填充圆、文本等。2)支持多用户对同一内容进行讨论功能。有纯文字的讨论显示内容区和图形、文本讨论显示内容区。3)支持用户自觉锁的功能。如果用户不是主讲者,也就是对图形、文本显示内容区的绘制者,就要自觉地锁定对图形、文本显示内容区的操作功能,只能对纯文字显示内容区内发表个人的意见。2.2 共享电子白板的系统结构电子白板由服务器端和客户端两部分组成,服务器端监听客户对某个特定端口的网络连接请求,并与之建立连接,这样,这个客户的数据就可以发送到服务器,再由服务器转发给其他客户。客户端的任务是将用户的输入数据发送给服务器,同时接收服务器转发的别的用户的输入数据。也就是说,每个客户端只与服务器进行通信,并不直接与其他客户建立连接。这个设计方案与另一方案,即在客户端之间直接建立网络连接相比较,其优点是客户端不需要管理和维护其他客户的信息,系统结构更清晰明了,系统效率也更高。客户端运行时将立即向服务器的某个端口发送连接请求,待连接建立后则由用户的发送线程发送该用户的输入数据到服务器。服务器端的主线程负责监听某个端口,并为每个发出请求的用户建立用户空间线程,这个线程负责接收记录用户的信息,更新用户名单列表,接收用户的发送线程发出的数据,并交给服务器转发线程进行转发。服务器转发线程根据用户名单列表,逐一发送转发数据到每个用户的接收线程。在客户端,用户接收线程接收服务器转发的数据,由用户端主线程进行处理后显示。客户端的输入数据类型分为两类:纯文本和图形对象。纯文本用于客户之间进行文字交谈,图形对象则包括直线、矩形、圆等图形的形式进行图形交谈。每一种数据类型都被包装成数据包(暂存在缓冲区里的形式)在网络上传送,客户端还要在接收到服务器转发同样的数据包后,进行解数据包,也就是对字符串进行分析后显示。3 共享电子白板的结构与设计流程3.1 共享电子白板信息流设计共享电子白板就是一个服务器端和多个同步的客户端进行信息交流的过程,这种结构就是C/S体系结构的信息流处理过程,本共享电子白板的信息流处理如下图所示。图2 共享电子白板的信息流处理图共享电子白板大致的实现模型是:1)服务器分配一个端口号。如果客户请求一个连接,服务器使用accept()方法打开socket连接,从而进行了正常的信息通信。2)客户在host的port端口建立连接。服务器和客户使用InputStream和OutputStream进行通信。下面接着分析共享电子白板系统的信息传递情况。4.2.1 由客户端向服务器端传递的主要消息1)登录链接时,在发送消息前面添加上“PEOPLE:”再加上用户名称用引号(:)隔开,再加上IP地址信息传给服务器。2)在发送纯文字信息时,在消息前面添加上“MSG:”,再加上发送信息的用户名称再用引号(:)隔开,再加上要发送的纯文字的消息信息。然后发送给服务器。3)在发送图形信息中的文本信息时,在消息前面添加上“DRAW:”,再加上文本关键字名后加上引号(:),再加上发送信息的用户名加上引号(:),再加上颜色分为红(R:)、绿(G:)、蓝(B:),这些颜色对文本字体没有任何的作用,只是便于客户端的接收分析,再加上起点和终点的坐标值,每一个坐标的(X,Y)值都要用同样的引号(:)隔开,再加上文本信息和引号(:)。然后发送给服务器。4)在发送图形信息中的线图时,在消息前面添加上“DRAW:”,再加上所绘画图形的关键字名后加上引号(:),再加上发送信息的用户名加上引号(:),再加上颜色分为红(R:)、绿(G:)、蓝(B:),再加上起点和终点坐标值,每一个坐标的(X,Y)值都要用同样的引号(:)隔开。然后发送给服务器。5)在用户退出共享电子白板系统时,发送消息中添加“QUIT:”以及退出系统的用户名称,然后将消息传送给服务器。信息的发送都是以字符的形式发送出去的,通过暂缓冲区缓存方法暂存后发送给服务器端的,格式一般如下图所示。图形绘制的各个值之间都要用引号(:)隔开。图3 发送信息格式4.2.2 由服务器端向客户端传递的主要消息1)服务器进行链接起动服务器工作。2)服务器管理员可以向所示已登录链接成功的用户发送任何信息。在消息前面添加上“MSG:”,再加上“SERVER:”再加上所要发送的文字信息。3)用户登录链接时向其他所有已登录的用户发出更新消息,在消息前面添加“PEOPLE:”以及登录链接的用户名称,然后发送给所有已登录的用户端。4)收到用户的纯文字、图形消息信息时,服务器则把它以同样的格式向所有已链接登录的用户转发信息出去给客户端。5)有用户注销时,向所有要线的用户发出通知,在消息前面添加上“QUIT:”信息和用户名称,同时更新用户列表信息,然后发送给所有客户进行更新和显示。6)当服务器退出时,服务器向所有在线客户发送服务器关闭信息,在消息前面添加上“QUIT:”和“SERVER:”信息,并关闭所有服务链接。信息的发送都是以字符的形式发送出去的,通过缓冲区缓存方法暂存后发送或转发的给所有在线客户端,格式一般如下图所示。图形绘制的各个值之间都要用引号(:)隔开。图4 发送或转发信息格式4.3 共享电子白板的设计流程4.3.1 服务器端程序设计流程按照服务器打开链接到关闭的顺序,可以将服务器端程序设计流程描述如下几等。1)创建服务器,初始化服务器套接字,并使其处于监听状态。2)当用户登录链接时,将目前的在线用户列表发给该用户,在服务器列表中记录该用户的登录链接信息,并显示在服务器端的相应位子,将该用户添加到在线用户列表中,记录用户列表中的人数,并显示出现在的在线人数用多少个。3)在发送消息时,服务器只是把从客户端接收的信息进行转发的功能形式。4)若某用户注销,则向所有在线用户发送通知,通知该用户关闭信息,同时在服务器列表中记录该项用户的注销信息,并从登录链接用户列表中将该用户删除掉,同时也要记录更新服务器在线用户列表中的人数,发送给所有在线用户,并显示在相应的位子。5)当服务器需要退出时,向所有用户发送关闭的信息,然后注销所有用户列表,服务器关闭信息发送通知所有用户。4.3.2 客户端程序设计流程按照用户从登录到注销的顺序,客户端程序设计流程如下所示。1)用户登录连接服务器,把用户名称和IP地址信息发送给服务器,建立起一个连接。2)接收服务器消息,对不同的消息采用不同的处理方法: 当收到用户登录连接返回的消息时,从中提取出已经登录用户列表,并逐个的添加到用户端的用户列表中。 收到用户发送来的消息,也就是服务器转发过来的消息时,显示在相应的消息框中。 收到其他用户注销的消息时,从用户列表中删除用户,更新用户列表,也就是用服务器转发的更新后的用户列表去一个个的添加到客户端的用户列表中。3)发送消息时,对不同的消息发送方式采用不同的处理方法:对发送纯文字信息和图形绘制信息的关键字标记都不一样,便于服务器端转发和客户端接收的分析显示。4)断开连接。若用户断开与服务器端的连接,则发送一个消息给服务器表示退出服务器连接,这一消息前面要添加“QUIT:”以及退出用户名称信息。5 共享电子白板的实现5.1 实现共享电子白板的语言和环境在编程语言的选择上,考虑到电子白板系统具有如下特点: 系统主要进行网络连接和数据传送; 客户端存在不同类型的输入数据类型,例如各种几何图形和文字等; 系统中存在多个线程,并且彼此之间要进行通信; 而且本人对Java编程语言特别的感兴趣,又一直在学习这门编程语言,因而决定选用Java语言,因为Java是一种面向对象的网络编程语言,它支持多线程,并且,Java的平台无关性以及安全性更是其他编程语言无法比拟的。 选 择Borland Jbuilder 9.0作为开发工具,它是一个强大的集成Java软件开发工具,使用JDK1.4进行开发,在实现共享电子白板中,主要了使用Java语言中的下面几个类: java.lang.Thread;用来建立线程,或者使用Runnable界面。可以为线程设 置 优先级,使用synchronized()指令来锁定临界区、同步通讯等。 .ServerSocket;用来建立服务器端Socket,并与某个端口绑定,使用accept()方法返回连接建立后的Socket对象。 .Socket;用来与某主机的某个端口建立Socket连接,使用getInputStream()和getOutputStream()方法获得输入和输出的流对象。 .InetAddress;用来获得和处理主机的网络地址,使用静态方法getByName()获得InetAddress 类对象,使用getAddress()和getHostName()获得主机的IP地址和域名。 共享电子白板中的Socket编程,它是用来实现底层网络的通信, 当一个Socket建立后,它就与本地的IP地址联系起来,IP地址仅简单地指定出入主机的特定路径,而连接亦可有多个。套接字地址完整地说是应用端口号,协议和本地IP地址的集合,它形成一个应用链路的终点,有效的激活一个套接字到套接字的连接。Socket通信机制提供了两种通信方式,即:面向连接的通信方式和面向无连接的方式。在设计时我们采用了前者-面向连接的通信方式,即通信前必须进行一次连接,从而建立起一条通信链路,并以字节流的形式在通信双方之间进行数据传输服务,它是一种安全、可靠的通信方式。在服务器端的是用serverSocket类,serverSocket连接后,还要调用accept()方法去监听,直得注意的是使用了一个while(true)语句去实现时时的轮询。相关代码:final static int DEFAULT_PORT=4000;void link_actionPerformed(ActionEvent e) if (serverSocket = null) try serverSocket = new ServerSocket(DEFAULT_PORT); class watch extends Thread ServerSocket serverSocket = null; public void run() while (true) if (frame.clients.size() 20) try socket = serverSocket.accept(); 在客户端中用Socket,调用前面讲过的InetAddress.getLocalHost()获得主机名。相关代码如下:final static int DEFAULT_PORT=4000;void linkjButton1_actionPerformed(ActionEvent e) try socket = new Socket(InetAddress.getLocalHost(),DEFAULT_PORT); 5.2 服务器端的实现及相关类和方法5.2.1 服务器的实现共享电子白板的服务器端是实现对客户端信息的记录和转发功能,共享电子白板的服务器端界面的实现是通过Java Swing 技术编写出来的,服务器端界面如下图所示。图5 共享电子白板服务器界面服务器启动连接后,会在服务器界面的系统消息框中显示出服务器连接成功,服务器时时的监听客户端的请求连接,如果有客户端用户的请求连接时,服务器就记录用户的用户名称和IP地址信息,把用户名称增加到用户列表名单中,并统计和显示用户列表名单的在线人数,服务器端把接收到客户端的用户信息添加并显示到服务器界面的用户信息表中,用户信息表是用来记录每一个用户的用户名、IP地址和连接情况,同时在系统消息框中显示出相应的信息;如果接收到的是用户的会议讨论信息,也就是纯文字和图形信息时,服务器通过分析后再进行转发给所有在线用户;如果接收的是用户的请求退出时,服务器更新用户列表名单,用户在线人数减一并显示出来,并在用户信息表中销去请求退出用户的所有信息和在系统消息框中提示某某用户断开连接,同时把请求退出的用户名称发送给所有在线用户。如果是服务器退出,也是要把服务器端关闭的信息通知给所有要线用户,并注销和关闭所有服务。其上面的所有实验结果如下图所示。图6 服务器端的结果显示5.2.2 服务器实现的相关类和方法服务器端的实现有以下几个类和方法:1)Application1 类,这个类是服务器工程的执行类,是JBuilder 9.0工具在服务器工程里面创建一个Java Application 时,自动生成的类。也就是整个服务器工程的主类。2)Frame1 类,这个类是服务器界面的实现类,是用来实现服务器界面上的个个组建的。服务器启动链接的功能实现的代码如下。void link_actionPerformed(ActionEvent e) if (serverSocket = null) try serverSocket = new ServerSocket(4000); if (serverSocket != null) jTextArea1.append(系统提示: 服务器+ 已经启动n); Thread a = new watch(this); a.start(); 3)watch 类,这个类是服务器用来对用户登录链接进行监听的线程类。其代码如下:class watch extends Thread watch(Frame1 frame) public void run() while (true) if (frame.clients.size() 20) try socket = serverSocket.accept(); Client c = new Client(frame, socket); /定义并实例化一个Client线程,每一个线程对应一个客户连接 frame.clients.addElement(c); /加入到Clients数组中 if (c.checkName(c) int num = frame.active_connects + 1; frame.active_connects+; jTextField2.setText(目前已经有: + num + 用户连接); Client listdata = (Client) frame.clients.elementAt(num - 1); frame.list1.add( + + listdata.ip + 已经连接, num - 1); c.start(); /启动线程 c.notifyRoom(); /监视白板窗口的连接变化 else c.ps.println(FAULTNAME); /检查名字不合法,则在发送流中发送FAULTNAME c.disconnect(c); /断开连接 else try Thread.sleep(400); 4)Client 类,这个类是服务器用来对用户发送信息的接收分析和转发的类。这个类有还对用户名称的判断和对用户列表的更新功能。服务器对用户发送信息的接收和分析功能和把分析后的信息存储在相应的缓存中,这个功能的实现是Clint类中的run()方法,其功能实现代码如下。public void run() while (true) String line = null; try line = dis.readLine(); /读取客户端发送的数据流 catch (IOException ex) jTextArea1.append(系统消息: 服务器+ Error +ex); disconnect(this); notifyRoom(); return ; if (line = null) /客户已经离开 disconnect(this); notifyRoom(); return ; StringTokenizer st = new StringTokenizer(line, :); String keyword = st.nextToken(); /存储关键字,判断消息类型 if (keyword.equalsIgnoreCase(MSG) StringBuffer message = new StringBuffer(MSG:); /在服务器建立一个缓冲区,用于纯文字信息的发送 String strname = st.nextToken(); message.append(strname + :); message.append(st.nextToken(0); sendClients(message); else if(keyword.equalsIgnoreCase(DRAW) ) StringBuffer draw = new StringBuffer(DRAW:); /在服务器建立一个缓冲区,用于图形信息的发送 if (st.hasMoreTokens() keystr = st.nextToken(); draw.append(keystr + :); if (st.hasMoreTokens() draw.append(st.nextToken() + :); if (st.hasMoreTokens() draw.append(st.nextToken() + :); if (st.hasMoreTokens() draw.append(st.nextToken() + :); if (st.hasMoreTokens() draw.append(st.nextToken() + :); if (st.hasMoreTokens() p1x = st.nextToken(); draw.append(p1x + :); if (st.hasMoreElements() p1y = st.nextToken(); draw.append(p1y + :); if (st.hasMoreTokens() p2x = st.nextToken(); draw.append(p2x + :); if (st.hasMoreTokens() p2y = st.nextToken(); draw.append(p2y + :); if (st.hasMoreTokens() text = st.nextToken(); draw.append(text + :); sendClients(draw); else if (keyword.equalsIgnoreCase(QUIT) frame.list1.clear(); disconnect(this); for (int i = 0; i frame.clients.size() ; i+) Client listdata1 = (Client)frame.clients.elementAt(i); frame.list1.add( + + listdata1.ip +已经连接, i); notifyRoom(); this.stop();服务器接收到客户信息分析后转发功能的方法是Client类中的sendClients()和send()两个方法的组合,其功能实现代码如下。public synchronized void send(StringBuffer message) ps.println(message); ps.flush(); public static synchronized void sendClients(StringBuffer message) for (int i = 0; i frame.clients.size() ; i+) Client c = (Client)frame.clients.elementAt(i); c.send(message);服务器接收到用户登录链接的用户名称后,进行分析是否该用户名称已经存在的功能的方法是Clinet类中的checkName()方法,其功能实现代码如下。public static boolean checkName(Client newClient) for (int i = 0; i frame.clients.size() ; i+) Client c = (Client)frame.clients.elementAt(i); if (c != newClient) & .equals(newC) ) return false; return true;服务器对所有客户端用户列表的更新功能,也就是服务器把记录下来所有用户列表中的用户名称转发给所有在线用户的功能,这个功能的实现是Clinet类中的notifyRoom()方法,其功能实现代码如下。public static void notifyRoom() StringBuffer people = new StringBuffer(PEOPLE:); for (int i = 0; i Math.abs(e.getY() - p1.y) if (Math.abs(p2.x - p1.x) Math.abs(p2.y - p1.y) g.drawOval(p1.x, p1.y, Math.abs(p2.x - p1.x), Math.abs(p2.x - p1.x); else g.drawOval(p1.x, p1.y, Math.abs(p2.y - p1.y), Math.abs(p2.y - p1.y); g.setColor(colour); g.drawOval(p1.x, p1.y, Math.abs(e.getX() - p1.x), Math.abs(e.getX() - p1.x); else if (Math.abs(p2.x - p1.x) Math.abs(p2.y - p1.y) g.drawOval(p1.x, p1.y, Math.abs(p2.x - p1.x), Math.abs(p2.x - p1.x); else g.drawOval(p1.x,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版商场设施更新换代合同范本
- 2025电子商务合同法指导下的网络直播带货合作协议
- 2025年度高端茶叶原产地直供购销合同模板
- 2025灯具批发零售合同示范文本
- 2025版服装生产设备租赁与维修服务合同
- 2025年男方出轨离婚协议:财产分割、子女抚养及离婚赔偿
- 2025年度保险理赔法律援助服务合同样本
- 2025 高密市PPP项目PPP项目合同
- 2025新版中介房屋租赁合同范本
- 语言文字知识培训方案课件
- 物业客服管理知识培训课件
- 2025海南省老干部服务管理中心招聘事业编制人员6人(第1号)考试备考题库及答案解析
- 居民体重管理核心知识课件
- 2025-2026学年湘教版(2024)初中数学八年级上册教学计划及进度表
- 2025至2030中国公安行业发展趋势分析与未来投资战略咨询研究报告
- 口腔医疗风险管理实施方案
- 2025互联网营销师三级理论考核试题及答案
- 新生儿持续性肺动脉高压个案护理
- bbc国际音标教学课件
- GB/T 45763-2025精细陶瓷陶瓷薄板室温弯曲强度试验方法三点弯曲或四点弯曲法
- 贵州省贵阳市2024-2025学年八年级下学期期末道德与法治试卷(含答案)
评论
0/150
提交评论