网络课程设计报告模板.docx
- 文档编号:9630052
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:18
- 大小:60.03KB
网络课程设计报告模板.docx
《网络课程设计报告模板.docx》由会员分享,可在线阅读,更多相关《网络课程设计报告模板.docx(18页珍藏版)》请在冰豆网上搜索。
网络课程设计报告模板
课程设计(论文)任务书
学 院 专 业 班
一、课程设计(论文)题目 基于udp的点到点聊天程序
二、课程设计(论文)工作2008年6月23日起至2008年6月29日止。
三、课程设计(论文)地点:
软件机房
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)使学生掌握系统各功能模块的基本工作原理;
(2)使学生学会系统调试;
(3)培养学生分析、解决问题的能力;
(4)提高学生的软件文档写作能力。
2.课程设计的任务及要求
1)基本要求:
(1)分析系统各功能模块的工作原理;
(2)需求分析、概要设计、详细设计和调试分析、测试分析、课设心得、参
考文献
(3)提出系统的设计方案;
(4)对所进行编程、调试、修改。
2)创新要求:
在基本要求达到后,可进行创新设计,如:
深入编程,高级编程;
3)课程设计报告编写要求
(1)要按照书稿的规格打印誊写课设报告
(2)报告包括目录、绪论、正文、小结、参考文献、附录等
(3)报告装订按学校的统一要求完成
4)答辩与评分标准:
(1)考勤与学习态度:
20分;
(2)完成原理分析和设计过程:
完成:
35分;
(3)完成调试运行结果正确:
30分;
(4)答辩:
15分。
5)参考文献:
(1)贾斌等.网络编程技巧与实例.北京:
人民邮电出版社,2001
(2)侯捷.《深入浅出MFC》华中科技大学出版社
(3)http:
//
6)课程设计进度安排
内容天数 地点
总体需求与分析构思及收集资料1 图书馆
各模块的编程实现,调试与修改3 机房
撰写论文与答辩1 图书馆、机房,
学生签名:
08年6月29日
课程设计(论文)评审意见
(1)考勤与学习态度(20分):
优( )、良( )、中( )、一般()、差( );
(2)原理与设计分析(35分):
优( )、良( )、中( )、一般( )、差( );
(3)调试与运行(30分):
优( )、良( )、中( )、一般( )、差( );
(4)答辩(15分):
优( )、良( )、中( )、一般( )、差( );
(5)格式规范性及考勤是否降等级:
是( )、否( )
评阅人:
职称:
讲师
2008年6月30日
目 录
一、需求分析1
1.1winsock编程技术简介………………………………………..1
1.2点到点聊天的原理及UDP协议的简介……………………….3
二、概要设计6
三、详细设计8
四、调试分析13
五、测试分析14
六、课设心得15
七、参考文献16
一需求分析
在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识.
1.1winsock编程技术简介
目前,Inte.NET已成为世界上最大的TCP/IP网络。
早期的站点是unix机器,一组称为Berkeley插口的约定成为INTERNET上UNIX机器之间利用TCP/IP进行通信的标准。
其他操作系统也用TCP/IP进行通信,这极大地促进了INTERNET的发展。
windows插口
WINSOCK标准定义了一个DLL接口,通常叫做WINSOCK.DLL或者WSOCK32.DLL。
无论机器上安装了哪一个DLL,只要函数的名字,参数含义以及最终的功能是相同的,应用程序就可以调用这些函数。
在插口编程里一个重要的概念就是一个插口的端口。
INTERNET上的每一个站点都有一个数字地址称为IP地址,通常是由逗号分开的四个数。
在机器上运行的程序可以随心所欲地用插口与其他机器进行通信。
请求到达机器时携带一个端口号,一个大于1024的数,它表明此请求是给那个应用程序的。
多数插口的工作是基于连接的:
两个程序在每一端用一个插口形成一个连接,然后沿着该连接收发数据。
有些应用程序倾向无连接地发送,但是这些数据的到达是没有保障的。
客户机/服务器模式
在TCP/IP应用中,如何采用客户机/服务器模式。
客户机一方,TCP/IP应用程序功能如下:
1)打开通信信道(申请一套接字),并连接到服务器在主机的保留端口,该端口对应服务器的TCP/IP进程。
2)向服务器发出请求报文,等待接收应答。
3)从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程。
服务器一方,TCP/IP应用程序动作如下:
1)打开通信信道(申请一套接字),通知本地主机在某一保留端口接收客户机请求。
2)等待客户请求到达指定端口。
3)接收到请求,启动一新进程处理用户请求,同时释放旧进程以响应新的客户请求,一旦服务完成,关闭新进程与客户的通信链路。
4)继续等待客户机请求。
5)如果不想响应客户机请求,关闭服务器进程。
综上所述,TCP/IP应用中的服务器程序必须先于客户机进程启动,直到对客户机的响应结束或强迫终止。
WINSOCK1.1版通过异步选择机制来实现非阻塞通信方式,对于非阻塞方式,函数被调用后立即返回,当传送完成后由WINSOCK给进程发一个事先约定好的消息.
WinSock是WindowsSockets的缩写,它作为Windows和TCP/IP之间的接口。
而我们都知道TCP/IP在互联网举足轻重的作用,如果希望了解Socket,那么BerkeleySocket不可不提,它是在UNIX下对TCP/IP进行编程的标准模式。
WinSock的设计和它很象,这样可以使UNIX上的应用程序在Windows平台上使用。
但是,两者也有一些区别,如WinSocket利用了Windows的一些特点,而这些特点对于UNIX来说是没有的。
WinSock是一个DLL,它运行于Windows3.x,WindowsforWorkgroups,windowsNT和Windows95下。
WINSOCK.DLL是与TCP/IP的接口,通过这个接口和网络进行连接。
WINSOCK.DLL实际上是作为WinSock应用程序和TCP/IP协议栈之间的中间层。
用户的应用程序告诉WINSOCK.DLL需要做什么,WINSOCK.DLL将这些命令传送到TCP/IP协议栈,由TCP/IP协议栈传送到网络。
但是重要的事情是用户必须注意用户使用的WINSOCK.DLL必须和TCP/IP的版本号一致。
不要以后它们都叫WinSocks它们就是一样的。
所以,如果用户在使用microsoft的TCP/IP,就不能使用TrumpetWinsock。
同样,如果用户正在使用SLIP连接,而希望由ChameleonSampler的Winsock切换到TrumpetWinsock,用户必须删除Chameleon的WINSOCK.DLL,然后再安装新的WINSOCK.DLL。
1.2点到点聊天的原理及UDP协议的简介
利用WinSock控件可以与远程计算机建立连接,并通过用户数据文报协议(UDP)。
这种可以用来创建客户与服务器应用程序。
与Timer控件类似,WinSock控件在运行时是不可见的。
用途
1创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。
2创建一个服务器应用程序,作为多个用户的数据的汇入点。
3创建“聊天”应用程序。
在使用WinSock控件时,首先需要考虑使用什么协议。
因此我选择UDP协议
UDP协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:
消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。
另外,单次传输的最大数据量取决于具体的网络。
协议的设置
在设计时,可以按如下方式设置应用程序使用的协议:
在“属性”窗口中单击“协议”,sckUDPProtocol。
也可以使用程序代码来设置Protocol属性,如下所示:
Winsock1.Protocol=sckTCPProtocol
确定计算机的名称
在与远程计算机相连接的时候,需要知道它的IP地址或者它的“好听的名字”。
IP地址是一串数字,每三个数字为一组,中间用点隔开(形如xxx.xxx.xxx.xxx)。
通常,最易记住的是计算机的“好听的名字”。
确定计算机的名字
1在计算机的“任务栏”上,单击“启动”。
2在“设置”项中,单击“控制面板”。
3双击“网络”图标。
4单击“标识”选项卡。
5在“计算机名称”框中可以找到计算机的名称。
上面找到的计算机名称可以作为RemoteHost属性的值。
UDP初步
创建UDP应用程序比创建TCP应用程序还要简单,因为UDP协议不需要显式的连接。
一个Winsock控件必须显式地进行“监听”,另一个必须使用Connect方法初始化连接。
UDP协议不需要显式的连接。
要在两个控件中间发送数据,只需进行以下的三步即可(在连接的双方):
1.将RemoteHost属性设置为另一台计算机的名称。
2.将RemotePort属性设置为第二个控件的LocalPort属性。
3.调用Bind方法,指定使用的LocalPort。
(下面将详细地讨论该方法。
)
因为两台计算机的地位可以看成“平等的”,这种应用程序也被称为点到点的。
为了具体说明这个问题,下面将创建一个“聊天”应用程序,两个人可以通过它进行实时的交谈。
创建一个UDP伙伴
1创建一个新的StandardEXE工程。
2将缺省的窗体的名称修改为frmPeerA。
3将窗体的标题修改为“PeerA”。
4在窗体中放入一个Winsock控件,并将其命名为udpPeerA。
5在“属性”页上,单击“协议”并将协议修改为UDPProtocol。
6在窗体中添加两个TextBox控件。
将第一个命名为txtSend,第二个命名为txtOutput。
7为窗体增加如下的代码。
PrivateSubForm_Load()
'控件的名字为udpPeerA
WithudpPeerA
'重点:
必须将RemoteHost的值
'修改为计算机的名字。
.RemoteHost="PeerB"
.RemotePort=1001'连接的端口号。
.Bind1002'绑定到本地的端口。
EndWith
frmPeerB.Show'显示第二个窗体。
EndSub
PrivateSubtxtSend_Change()
'在键入文本时,立即将其发送出去。
udpPeerA.SendDatatxtSend.Text
EndSub
PrivateSubudpPeerA_DataArrival_
(ByValbytesTotalAsLong)
DimstrDataAsString
udpPeerA.GetDatastrData
txtOutput.Text=strData
EndSub
创建第二个UDP伙伴
1在工程中添加一个标准窗体。
2将窗体的名字修改为frmPeerB。
3将窗体的标题修改为“PeerB”。
4在窗体中放入一个Winsoc
二、概要设计
运用所学的编程知识,加上网络方面的一些知识结构,模拟QQ聊天工具,通过SOCKET编写的简易网络聊天工具。
1)聊天程序的功能及其相关网络协议
1、建立侦听服务
这个需求是服务器端的需求。
2、用户登录
包括客户端请求登录以及服务器端响应登录两个过程。
3、收发聊天信息
包括客户端发送聊天信息以及服务器端转发聊天信息两个过程。
4、收发系统信息
由服务器端发送给客户端的信息。
5、用户下线
包括客户端请求下线以及服务器响应请求两个过程,这个与用户登录类似。
6、服务器关闭
该聊天工具采用C/S结构,在分布处理过程中,使用基于连接的网络通信模式。
该通信模式首先在客户机和服务器机之间定义一套通信协议,并创建一个SOCKET类,利用这个类建立一条可靠的连接;然后,客户/服务器再在这条连接上可靠地传输数据。
客户机发出请求,服务器监听来自客户机的请求,并为客户机提供响应服务。
这就是典型的“请求-应答”模式。
服务器端和客户端的功能说明如下:
服务器:
功能:
1、启动服务,建立侦听,接受客户端连接。
2、接收、分析、转发聊天消息
3、向客户端发送系统消息
4、关闭服务,并向客户端发送服务器关闭消息
客户端:
功能:
1、连接服务器,发送用户登录请求
2、向服务器发送聊天信息
3、接收服务器转发的聊天信息
4、接收服务器发送的系统信息
5、响应服务器关闭的消息
TCP/IP服务器与客户端套接字中,客户通过服务器端的IP地址和端口号来建立和服务器的连接,.Sockte类勇于执行客户端的TCP操作。
每个服务器套接字运行在服务器特定的端口,监听在这个端口的TCP连接。
当远程的客户端的Socket试图与服务器指定端口建立连接时,服务器被激活,判定客护端的连接,并打开两个主机之间固有的连接。
一旦客户端与服务器建立了连接,则两者之间就可以传送数据,而数据是通过这个固有套接字传递的。
在ServerSocket类中包含了创建ServerSocket对象的构造方法,在指定端口监听的方法,建立连接后发送和接受数据的方法。
服务器与客户端根据一定的网络协议交互,直到关闭连接。
三详细设计
基于客户/服务器模型的套接字编程,服务器端和客户端的设计如下所示:
1)、服务器
针服务器功能,设计了下面4个类:
1、用户信息链表类:
提供一个链表数据结构以及一组链表的操作函数,用于保存用户信息。
提供链表的添加、删除以及查找这3个基本功能。
部分功能代码如下:
publicclassUserInfoList{
Noderoot;
Nodepointer;
intcount;
publicUserInfoList()
{
root=newNode();
root.next=null;
pointer=null;
count=0;
}
publicvoidadd(Noden)//新的用户登陆,向链表中加入成员用户
{……}
publicvoiddel(Noden)//用户离开,从链表中删除该用户
{……}
publicintgetCount()//统计当前用户的人数
{……}
publicNodefind(Stringusername)//通过用户名来查找该用户的状态
{……}
publicNodefind(intindex)//通过结点来查找该用户的状态
{……}
}
2、服务器主框架类:
提供服务器的界面,并且实现了服务器的启动和关闭以及服务器系统的消息的发送功能。
部分代码如下:
publicclassServerFrameextendsJFrame{//服务器的界面设置
……
publicvoidinit(){
BorderbevelBorder=BorderFactory.createBevelBorder(
BevelBorder.RAISED,Color.white,Color.white,Color.white,
Color.white);
……………………///////////提供服务器的界面,排版及部件
pack();
jbStartServer.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
startServer();
}
});/////////////响应事件监听者
……/////////////同上面的实现事件
}
服务器的启动和关闭以及服务器系统的消息的发送:
publicvoidstartServer(){……}
publicvoidstopServer(){……}
publicvoidsendStopToAll(){……}
publicvoidsendMsgToAll(Stringmsg){……}
publicvoidsendSystemMessage(){……}
3、务器侦听线程类:
负责侦听客户端连接,并实现响应用户登录的功能。
publicclassServerListenThreadextendsThread{
ServerSocketserver;///定义SOCKET端口
………………
publicvoidrun()
{
while(!
isStop&&!
server.isClosed())
{///通过SOCKET端口进行传输的数据流及传输流
/////获取函数getOutputStream()和getInputStream()
client=newNode();
client.socket=server.accept();
client.output=newbjectOutputStream(client.socket.getOutputStream());
client.output.flush();
client.input=newObjectInputStream(client.socket.getInputStream());
client.username=(String)client.input.readObject();
}
}
}
4、服务器接收线程类:
负责接收客户端消息,并且对消息作出判断和相应的响应
publicvoidrun(){
sendUserList();//把一个新的成员列表发给所有的用户
while(!
isStop&&!
client.socket.isClosed()){
Stringtype=(String)client.input.readObject();
if(type.equalsIgnoreCase("聊天信息")){
StringtoSomebody=(String)client.input.readObject();
Stringstatus=(String)client.input.readObject();
Stringaction=(String)client.input.readObject();
Stringmessage=(String)client.input.readObject();
/////获取来自客户的消息,并进行分类发送
Stringmsg=client.username+""+action+"对"
+toSomebody+"说:
"+""+message+"\n";
if(status.equalsIgnoreCase("悄悄话")){
msg="[悄悄话]"+msg;
}//分类发送客户的消息
…………………………
}
publicvoidsendToAll(Stringmsg){……}//发送消息给所有的用户
2)、客户
考虑设计两个类:
1、客户端主框架类:
用户界面、用户登录与下线、发送聊天信息
publicclassClientFrameextendsJFrame{
Socketsocket;//定义SOCKET客户端
ObjectOutputStreamoutput;//定义到服务器的输出流
ObjectInputStreaminput;//定义从服务器获取数据的输入流
…………
publicClientFrame(){…………//客户端界面的设置,排版及组件
serverAddress=newJTextArea("请输入服务器地址");//输入连接到服务器的IP地址
login.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
LogIn();
}
});
…………………………//同上一样的时间响应
}
publicvoidLogIn(){/////////网络数据通信
try{
socket=newSocket(serverAddress.getText(),8000);
//设置服务器的IP和端口号80000
}catch(UnknownHostExceptione){
serverAddress.setText("服务器地址不可达,请重新输入!
");
serverAddress.setEditable(true);
}
output=newObjectOutputStream(socket.getOutputStream());//输出信息
output.flush();
input=newObjectInputStream(socket.getInputStream());//获取输入信息
output.writeObject(textfield.getText());//将消息域的信息发给服务器
output.flush();//刷新数据流
…………
}
2、客户端接收线程类:
信息接收功能、响应服务器关闭消息
publicvoidrun()
{
while(!
socket.isClosed())///判断当前的连接状态
{
Stringtype=(String)input.readObject();//获取信息
if(type.equalsIgnoreCase("系统信息"))
{……//发送系统消息}
elseif(type.equalsIgnoreCase("服务关闭"))
{……//关闭与服务器的连接}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 课程设计 报告 模板