电子白板《Java网络编程技术》.docx
- 文档编号:29054760
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:84
- 大小:880.79KB
电子白板《Java网络编程技术》.docx
《电子白板《Java网络编程技术》.docx》由会员分享,可在线阅读,更多相关《电子白板《Java网络编程技术》.docx(84页珍藏版)》请在冰豆网上搜索。
电子白板《Java网络编程技术》
广州大学华软软件学院软件工程系
《JAVA网络编程技术(SS0013)》课程设计
JavaSocket网络编程
-------电子白板即时通信程序设计
课程设计指导书
2011-2012学年第一学期
课程名称:
JAVA网络编程技术
课程代码:
SS0013
计划学时:
68学分:
4
课程性质:
必修、考试面向专业:
软件工程
课程负责人:
邹立杰
授课老师:
邹立杰
班级(小班代码):
姓名:
陈甜甜学号:
广州大学华软软件学院
SouthChinaInstituteofSoftwareEngineering,GuangZhouUniversity
1、课程设计题目:
JavaSocket网络编程
-------电子白板即时通信程序设计
2、课程设计要求:
通过本课程设计深刻理解Java网络编程的基本方法和技巧
本课程设计所要实现的电子白板程序主要应用的编程技术:
(1)JavaSWingGUI界面设计技术
(2)JavaSocket网络编程技术
(3)JavaObjectInputStream和ObjectOutputStream类的实例发送和接收对象的功能
(4)实现Serializable接口编写功能类,实现该类对象的网络发送和接收。
3、程序基本功能:
(1)服务器端:
提供提供白板图形和文字消息的转发转发功能,把当前的登录到服务器上的所有客户端的电子白板内容群发转发给在线的每个客户,以及群发转发即时文字消息。
(2)服务器端保存自第一个用户登录后的所有白板内容。
(3)程序的客户端通过JavaSocket网络协议和服务器实现网络通信,接收服务器端发送过来的白板内容消息并且绘制在该客户端的白板客户区内,接收显示文本消息;绘制白板并发送到服务器端,为所有客户端共享。
(4)客户端登录时,发送登录消息,服务器端把当前保存的白板内容发送到该客户端,该客户端收到由服务器发送来的白板内容绘制到客户区。
(5)电子白板图形有圆形、填充圆形、矩形、填充矩形、圆角矩形、填充圆角矩形、直线和随机曲线等。
4、GUI设计
GUI设计使用SUN公司SWing可视JavaBean组件技术或IBM公司的SWT可视JavaBean组件技术。
GUI设计界面
客户端:
客户端使用SWing组件技术进行GUI界面设计
1)参考界面
客户端登陆:
客户端主程序界面:
服务器端:
服务器端为一个控制台应用程序,主要功能是传递客户端消息。
5、主要代码:
(1)Serializable接口应用:
在服务器端通过ObjectInputSream和ObjectOutputStream以及Socket类传送dog类的对象到客户端,在客户端接收由服务器端传送过来的dog对象,并输出器属性。
时序图:
类图:
1)服务器端代码
importjava.io.*;
import.*;
interfacemyDogextendsjava.io.Serializable{
voidsetAge(inta);
intgetAge();
voidsetName(Stringn);
StringgetName();
voidrun();
}
classdogimplementsmyDog{
privateintage;
privateStringname;
publicvoidsetAge(inta){
age=a;
}
publicintgetAge(){
returnage;
}
publicvoidsetName(Stringn){
name=n;
}
publicStringgetName(){
returnname;
}
publicvoidrun(){
System.out.println("Icanrunfast!
");
}
}
publicclassOServer{
publicstaticvoidmain(String[]args)throwsIOException{
dogd=newdog();
d.setAge(10);
d.setName("Tom");
System.out.println(d.getAge());
System.out.println(d.getName());
d.run();
ServerSockets=newServerSocket(8888);
Socketss=s.accept();
OutputStreamout=ss.getOutputStream();
BufferedOutputStreamb=newBufferedOutputStream(out);
ObjectOutputStreamoo=newObjectOutputStream(b);
oo.writeObject(d);
oo.flush();
}
}
2)客户端代码
importjava.io.*;
import.*;
publicclassOClient{
publicstaticvoidmain(String[]args)throwsIOException,ClassNotFoundException{
Sockets=newSocket("127.0.0.1",8888);
InputStreamin=s.getInputStream();
BufferedInputStreaminput=newBufferedInputStream(in);
ObjectInputStreaminn=newObjectInputStream(input);
dogd=(dog)inn.readObject();
System.out.println("client:
"+d.getAge());
System.out.println("client:
"+d.getName());
d.run();
}
}
编译运行:
服务器端:
客户端:
运行结果可以看出,从服务器发送的客户端的dog对象,属性被取出、输出。
结果正确。
(2)简易网络画板电子白板程序
1)功能:
在服务器端实现简易画板,在客户端同步服务器端的画板
2)运行截图:
服务器户、客户端界面:
3)系统类图:
4)实现:
a.首先封装一个ranomLine类,作为用鼠标划线的轨迹的记录器,并封装实现自动划线的方法:
其中有一个向量Vector域,用来记录鼠标划线所包含的点的对象,paint(Graphicsg)方法是实现遍历Vector中的点,并将这些点画出。
importjava.io.*;
importjava.util.*;
importjava.awt.*;
publicclassrandomLineimplementsSerializable{
Vectorpoints=newVector();
Colorcolor=null;
intx0,y0,x1,y1;
Pointpoint,start,end;
publicrandomLine(Colorc)
{
this.color=c;
}
publicvoidsetPoints(intx,inty)
{
point=newPoint(x,y);
this.points.add(point);
}
publicvoidpaint(Graphicsg)
{
g.setColor(color);
EnumerationallPoints=points.elements();
start=(Point)allPoints.nextElement();
x0=(int)start.getX();
y0=(int)start.getY();
while(allPoints.hasMoreElements())
{
end=(Point)allPoints.nextElement();
x1=(int)end.getX();
y1=(int)end.getY();
g.drawLine(x0,y0,x1,y1);
x0=x1;
y0=y1;
}
}
}
randomLine类时序图:
b.服务器端:
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.io.*;
import.*;
publicclassmyPanelextendsJPanel{
privaterandomLineranLine=newrandomLine(Color.red);
privateServerSockets;
privateSocketss;
privateObjectOutputStreamoutput;
privateOutputStreamos;
privateBufferedOutputStreamb;
privateGraphicsg;
publicintx0,y0,x1,y1;
publicmyPanel()
{
setBounds(0,0,400,300);
setBackground(Color.white);
addMouseMotionListener(newmouseAction());
addMouseListener(newmousemovpress());
this.validate();
newmyThread().start();
}
publicvoidpaint(Graphicsg)
{
}
classmouseActionextendsMouseMotionAdapter
{
publicvoidmouseDragged(MouseEvente)
{
g=getGraphics();
g.setColor(Color.red);
x1=e.getX();
y1=e.getY();
g.drawLine(x0,y0,x1,y1);
x0=x1;
y0=y1;
ranLine.setPoints(x1,y1);
}
}
classmousemovpressextendsMouseAdapter
{
publicvoidmousePressed(MouseEvente)
{
x0=e.getX();
y0=e.getY();
}
publicvoidmouseReleased(MouseEvente)
{
try
{
os=ss.getOutputStream();
b=newBufferedOutputStream(os);
output=newObjectOutputStream(b);
output.writeObject(ranLine);
output.flush();
}
catch(IOExceptionex){}
}
}
classmyThreadextendsThread
{
publicvoidrun()
{
try
{
s=newServerSocket(1234);
ss=s.accept();
}
catch(IOExceptionex){}
}
}
}
classmyFrameextendsJFrame
{
myPanelp=newmyPanel();
publicmyFrame()
{
super("白板服务器");
setLayout(null);
setBounds(100,100,400,300);
add(p);
setVisible(true);
this.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
}
publicstaticvoidmain(String[]ss)
{
newmyFrame();
}
}
c.客户端
importjava.awt.*;
importjava.io.*;
import.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassmyClientPanelextendsJPanel{
privaterandomLineranLine;
privateSocketss;
privateInputStreamis;
privateBufferedInputStreamb;
privateObjectInputStreaminput;
privateJFramef;
publicmyClientPanel(JFramef){
this.f=f;
setBounds(0,0,400,300);
setBackground(Color.white);
this.validate();
newmyThread().start();
try{
ss=newSocket("127.0.0.1",1234);
}catch(IOExceptionex){
f.setTitle("error");
}
}
publicvoidpaint(Graphicsg){
this.ranLine.paint(g);
}
classmyThreadextendsThread{
publicvoidrun(){
while(true){
try{
is=ss.getInputStream();
b=newBufferedInputStream(is);
input=newObjectInputStream(b);
ranLine=(randomLine)input.readObject();
repaint();
}catch(Exceptionex){
//f.setTitle("error-errpr");
}
}
}
}
}
classmyClientFrameextendsJFrame{
myClientPanelp=newmyClientPanel(this);
publicmyClientFrame(){
super("白板客户端");
setLayout(null);
setBounds(100,100,400,300);
add(p);
setVisible(true);
this.addWindowListener(newWindowAdapter()
{
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
}
publicstaticvoidmain(String[]ss){
newmyClientFrame();
}
}
4)思考问题:
为什么2两个客户端不同(见上图),另一客户端的每段线段是连在一起的?
提出方案实现客户端和服务器端图形一致。
(3)电子白板即时通信程序设计
1)系统UML建模:
用例图:
时序图:
2)网络消息协议类
电子白板即时通信程序进行网络通信要建立在一套完整的通信协议之上,其中有TCP/IP等网络协议,另外还要为电子白板即时通信程序制定一些自定义的通信协议,这些协议要对各种需要在网络通信中传送的各种消息进行协议规定。
本课程设计程序需要传送很多的网络消息。
3)系统类图:
除了添加随机曲线图形消息类的所有基本图形类消息类都实现Imessage接口
Imessage接口
类图:
代码:
importjava.io.*;
publicinterfaceIMessageextendsSerializable{}
a.LoninMessage类
类图:
代码:
importjava.util.*;
publicclassLoginMessageimplementsIMessage{
PaintedObjectspaintedOjbs;
intid;
VectorrandLineVector;
publicLoginMessage(PaintedObjectslist,VectorrandLines,intid){
this.paintedOjbs=list;
this.randLineVector=randLines;
this.id=id;
}
publicPaintedObjectsgetList(){
returnpaintedOjbs;
}
publicVectorgetRlines(){
returnrandLineVector;
}
publicintgetId(){
returnid;
}
}
b.白板客户端添加图形消息类:
ClientAddObjMsg
类图:
代码:
publicclassClientAddObjMsgimplementsIMessage{
Objectobj;
publicClientAddObjMsg(Objectobj){
this.obj=obj;
}
publicObjectgetObj(){
returnobj;
}
}
c.客户端移动图形消息类:
ClientReplaceObjMsg
类图:
代码:
importjava.io.Serializable;
publicclassClientReplaceObjMsgimplementsIMessage{
Objectid;
Objectobject;
publicClientReplaceObjMsg(Objectobject,Objectid){
this.object=object;
this.id=id;
}
publicObjectgetElement(){
returnobject;
}
publicObjectgetId(){
returnid;
}
}
d.客户端画随机曲线消息类:
ClientAddRanLineMsg
类图:
代码:
importjava.io.*;
publicclassClientAddRanLineMsgimplementsSerializable{
RanLineObjelement;
publicClientAddRanLineMsg(RanLineObjline){
this.element=line;
}
publicRanLineObjgetLine(){
returnelement;
}
}
e.客户端退出消息类:
类图:
代码:
publicclassClientQuitMsgimplementsIMessage{
privateStringname;
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
}
f.服务器端移除图形消息类:
类图:
代码:
publicclassServerReplacedMessageimplementsIMessage{
ObjectoldId;
Objectid;
Objectobject;
publicServerReplacedMessage(ObjectoldID,Objectid,Objectelement){
this.oldId=oldID;
this.id=id;
this.object=element;
}
publicObjectgetOldID(){
returnoldId;
}
publicObjectgetID(){
returnid;
}
publicObjectgetObject(){
returnobject;
}
}
g.服务器端添加图形消息类:
ServerAddObjMessage
类图:
代码:
publicclassServerAddObjMessageimplementsIMessage{
Objectid;
Objectobject;
publicServerAddObjMessage(Objectid,Objectelement){
this.id=id;
this.object=element;
}
publicObjectgetID(){
returnid;
}
publicObjectgetElement(){
returnobject;
}
}
4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java网络编程技术 电子白板 Java 网络 编程 技术