课程设计报告Word下载.docx

上传人:b****3 文档编号:18435422 上传时间:2022-12-16 格式:DOCX 页数:36 大小:251.15KB
下载 相关 举报
课程设计报告Word下载.docx_第1页
第1页 / 共36页
课程设计报告Word下载.docx_第2页
第2页 / 共36页
课程设计报告Word下载.docx_第3页
第3页 / 共36页
课程设计报告Word下载.docx_第4页
第4页 / 共36页
课程设计报告Word下载.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

课程设计报告Word下载.docx

《课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《课程设计报告Word下载.docx(36页珍藏版)》请在冰豆网上搜索。

课程设计报告Word下载.docx

在这个程序中我们用到的是java.lang.Object中的BorderLayout来设置布局,使用这个布局管理方式我们只需要设置North,South,Center来设置我们的程序的窗口的布局。

在本程序中,我们还用到了importjava.awt和importjava.awt.event的TextField和Button的GUI的组件。

初始化数据对象和构造用户界面;

用户随时可以输入自己的喜欢的名字;

创建用于监听的ServerSocket;

If(监听线程对象==NULL)

启动监听线程;

If(监听线程启动)

监听连接请求;

If(有连接请求)

启动一个新线程,监听其他的连接请求;

接受连接请求;

If(连接并且握手成功)

语音提示;

根据用户输入的信息和点击发送按钮事件,发数据;

随时接受已经连接的客户机的数据,并显示;

If(客户机退出)

复位系统;

提示用户,并且监听其他的连接请求;

If(用户发送bye信息或者直接退出程序)

关闭stream和Socket;

退出;

}elseif(有其他用户发出连接请求)

显示发送连接请求的用户的用户信息;

通知呼叫用户服务器正忙,稍后再试;

java列表说明各类模块的功能及成员变量和成员方法的作用:

服务器程序:

ClassLanServerTalk;

这个程序中设置了服务器程序的run方法,其中的init方法使用BorderLayout设置了本程序的界面的布局。

用Thread来设置了连接线程和监听进程。

当程序中收到或者发送“bye”字符时退出程序。

并全还设置了这种端口关闭方法。

ClassListenOther;

这个类是设置了专门用于监听其他用户连接时发送提示忙信息的类,并且还设置了退出是这种端口设置的关闭。

ClassServerTalkCanvas;

这个类很重要,设置了“显示消息区”的信息的更新方法。

若程序的消息区没有满则讲消息直接写到消息区,若消息区满了,就重写整个消息区。

ClassServerSendCtl;

这个类设置了当点击发送按钮的时候所需要完成的事件。

ClassServerNameCtl;

这个类用来给程序中的用户设置一个名字。

客户机程序:

ClassLanClientTalk;

这个类设置了run方法,和服务器程序中的LanServerTalk对应,而且实现的功能也是类似的。

ClassClientTalkCanvas;

设置了“显示消息区”的信息的更新方法。

ClassClientSendCtl;

ClassClientConnectCtl;

这个类中设置了点击呼叫主机和连接按钮时需要做的工作。

程序清单:

/**目的:

用于通信的服务器端

作者:

刘文,廖志威,陈明

时间:

2010年10月~2010年11月

*/

importjava.io.*;

import.*;

importjava.awt.*;

importjava.awt.event.*;

importjava.applet.AudioClip;

importjava.applet.Applet;

publicclassLanServerTalkextendsAppletimplementsRunnable

{

/**

*

privatestaticfinallongserialVersionUID=1L;

ServerTalkCanvasserverTalkCanvas;

//显示对话信息的对象

ServerSendCtlserverSendCtl;

//发送信息的用户接口的对象

ServerNameCtlserverNameCtl;

//更改服务器名称的用户接口的对象

ListenOtherlistenOther;

//监听其他用户连接请求的对象

privateServerSocketlistenSocket=null;

//监听用的socket

privatePrintWriteranswerSend=null;

//发送数据的对象

privateBufferedReaderanswerReceive=null;

//接受数据的对象

publicintSERVER_PORT=3210;

//监听端口

publicintMAX_CLIENTS=20;

//最大的请求数

publicbooleanKeepRunning=true;

//监听进程的运行标

privatestaticfinalbooleanAUTOFLUSH=true;

//printwriter的autoflush标志

privateAudioClipaudio;

//声音提示

@SuppressWarnings("

unused"

privatestaticStringdinfo="

"

;

//用于显示信息

privatestaticStringresponse="

//保存远程机器的信息

ThreadLanServerThread;

//服务器进程,用于监听连接以及通信

publicLanServerTalk()//初始化函数

{

try

{

listenSocket=newServerSocket(SERVER_PORT,MAX_CLIENTS);

//SERVER_PORT=3210,MAX_CLIENTS=20;

}catch(IOExceptionexcpt)

serverTalkCanvas.Display("

不能在这个端口成功监听:

+SERVER_PORT+"

+excpt);

System.exit

(1);

}//endofcatch

}//endofserver():

构造函数的结尾

publicvoidstart()//创建并启动用于监听的新进程的函数

if(LanServerThread==null)

LanServerThread=newThread(this);

LanServerThread.start();

}

}

publicvoidstop()//停止监听进程运行的函数

if(KeepRunning)

KeepRunning=false;

publicvoidinit()//初始化用户界面

setLayout(newBorderLayout());

serverTalkCanvas=newServerTalkCanvas();

add("

Center"

serverTalkCanvas);

serverSendCtl=newServerSendCtl(serverTalkCanvas);

South"

serverSendCtl);

serverNameCtl=newServerNameCtl(serverTalkCanvas);

North"

serverNameCtl);

resize(600,400);

audio=getAudioClip(getDocumentBase(),"

hi,au"

);

publicvoidrun()//-------run()函数:

接收请求并且用for实现通信的新进程

Stringnextline="

SocketforkSocket=null;

ThreadlistenOtherThread=null;

Thread.currentThread().setPriority(Thread.NORM_PRIORITY);

serverTalkCanvas.Display("

提示:

系统启动完成,正在监听连接"

如果没有输入用户名,缺省为LOCAL"

连接后,建议使用bye来借书通信"

while(KeepRunning)

{

if(!

ServerSendCtl.CONNECT)

{

forkSocket=listenSocket.accept();

answerReceive=newBufferedReader(newInputStreamReader(forkSocket.getInputStream()));

answerSend=newPrintWriter(forkSocket.getOutputStream(),AUTOFLUSH);

if(answerSend!

=null&

&

answerReceive!

=null)

{

ServerSendCtl.CONNECT=true;

audio.play();

}

if(listenOtherThread==null&

ServerSendCtl.CONNECT)

listenOther=newListenOther(listenSocket,audio);

listenOtherThread=newThread(listenOther);

listenOtherThread.start();

}

ServerSendCtl.InfoSend.equals("

))

if(ServerSendCtl.CONNECT)

if(ServerSendCtl.InfoSend.equals("

bye"

{

answerSend.println("

通信结束,再见"

ServerSendCtl.CONNECT=false;

break;

}

elseif((forkSocket==null)||(answerSend==null)||(answerReceive==null))

serverTalkCanvas.Display("

不能发送信息"

else

answerSend.println(ServerSendCtl.InfoSend);

serverTalkCanvas.Display(ServerNameCtl.LOCAL_NAME+ServerSendCtl.InfoSend);

ServerSendCtl.InfoSend="

answerSend.println("

~!

@#$%^"

if(answerReceive.ready())

nextline=answerReceive.readLine();

if(!

nextline.equals("

)&

!

serverTalkCanvas.Display(nextline);

nextline="

if(nextline.equals("

serverTalkCanvas.Display("

用户可能退出了,发送的消息可能无法到达"

系统假如监听状态,可以接受用户的连接请求"

=null)answerSend.close();

if(answerReceive!

=null)answerReceive.close();

if(forkSocket!

=null)forkSocket.close();

listenSocket.close();

ServerSendCtl.CONNECT=false;

nextline="

try

listenSocket=newServerSocket(SERVER_PORT,MAX_CLIENTS);

}catch(IOExceptionexcpt)

serverTalkCanvas.Display("

不能在端口监听"

+SERVER_PORT+excpt);

System.exit

(1);

answerSend.println("

连接成功"

}

ListenOther.otherreceiveInfo.equals("

serverTalkCanvas.Display(ListenOther.otherreceiveInfo);

ListenOther.otherreceiveInfo="

}

IO故障"

if(answerSend!

=null)answerSend.close();

if(answerReceive!

=null)answerReceive.close();

if(forkSocket!

=null)forkSocket.close();

listenSocket.close();

System.exit(0);

结束通信是出现IO故障"

}

classListenOtherimplementsRunnable//当与一个远程机器连接后,监听其他的连接的请求

publicbooleanRunning=true;

//监听进程的运行标志

publicPrintWriterotherSend;

publicBufferedReaderotherReceive;

publicstaticStringotherreceiveInfo="

publicSocketotherforkSocket=null;

publicAudioClipaudio;

publicListenOther(ServerSocketlistenSocket,AudioClipaudio)

this.listenSocket=listenSocket;

this.audio=audio;

publicvoidstop()

if(Running)

Running=false;

publicvoidrun()//用于提示客户暂时不能进行通信,之后关闭连接

Stringdinfo="

while(Running)

try

otherforkSocket=listenSocket.accept();

otherSend=newPrintWriter(otherforkSocket.getOutputStream(),AUTOFLUSH);

otherReceive=newBufferedReader(newInputStreamReader(otherforkSocket.getInputStream()));

otherreceiveInfo=otherReceive.readLine();

if(otherreceiveInfo!

=dinfo)

otherSend.println("

AgNreset"

dinfo=otherreceiveInfo;

可能正在与其他用户通信,请重试"

audio.play();

}catch(IOExceptionexcpt)

break;

}//endofcatch

if(otherSend!

=null)otherSend.close();

if(otherReceive!

=null)otherReceive.close();

if(otherforkSocket!

=null)otherforkSocket.close();

otherreceiveInfo="

结束监听其他用户的线程时"

+excpt;

classServerTalkCanvasextendsCanvas//用于以滚动的方式显示通信信息

privatefinalintrowhigh=25;

//每行25高

privateintrownum=25;

//在显示区同时显示的行数

privateintRectright,Rectbottom;

//显示区的右下角的坐标

privateintrowcurren=0;

//屏幕显示的当前韩式,当first=false,rowcurren始终显示为最后一行

privateStringdpinfo[];

//存放显示信息的字符串数组

privateboolean

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

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

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