通信网络程序设计Word文件下载.docx
《通信网络程序设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《通信网络程序设计Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
2.2.4添加好友模块---------------------12
2.2.5好友聊天模块---------------------12
2.2.6删除好友模块---------------------12
2.2.7加入群模块---------------------12
2.2.8创建群模块---------------------12
2.2.9退出群模块---------------------12
2.2.10群聊模块---------------------12
2.2.11资源共享模块--------------------12
2.2.12资源下载模块-------------------13
2.3服务器界面模块设计------------------13
2.3.1运行信息显示模块------------------13
2.3.2群信息以及群成员显示模块---------------13
2.3.3用户信息显示模块------------------13
2.3.4其他功能模块--------------------13
2.4客服端界面模块设计-------------------13
2.4.1注册模块---------------------13
2.4.2登录模块---------------------13
2.4.3添加好友模块--------------------13
2.4.4单聊模块---------------------13
2.4.5群聊模块---------------------14
2.4.6加入群模块---------------------14
2.4.7创建群模块---------------------14
2.4.8资源共享模块---------------------14
2.4.9资源下载模块---------------------14
3.结语------------------------14
三、用JAVA编写一个求圆面积的程序----------15
1、设计思路----------------------15
2、技术要求---------------------15
3、详细程序代码-------------------15
4、程序运行截图-------------------16
一、类的概念及应用
C#里的类(Class),也可以叫做对象(object),它由以下几部分组成:
成员变量,属性和方法,其中必不可少的是这个类不带任何参数的构造函数,它不指定返回类型,作用是初始化类的成员变量、分配内存等。
和c++不同,c#类只有构造函数,不需要析购函数,也就是说你只需要为成员变量分配内存,而不必要显式的释放内存,这是因为c#和java一样都是通过垃圾收集器来释放内存。
明白这些,我们就可以构造一个最简单的类,一个什么也不做的类:
publicclassMyClass
{
publicMyClass(){};
}
要使用时只需要简单的new一个出来就行了,象这样:
MyClassmyClass1=newMyClass();
这时已经创建了一个对象,尽管它什么也不做。
下面我们给它加一个私有字符型成员变量m_strTitle,并且在构造函数里初始化这个成员变量,整个类的定义就变成这样:
//私有成员变量
privatestringm_strTitle;
//构造函数
publicMyClass()
m_strTitle="
我已经被赋初值了"
;
注意定义成员变量的这行代码:
其中string好理解,说明m_strTitle是string类型的,那么最前面的private是什么作用呢?
这个private(私有)说这个成员变量是私有的,只有这个类内部的函数可以使用,而其他任何地方包括子类的函数都不能使用它,除了private,你还可以定义成public(公共)和protected(保护),public表明这个成员变量在任何地方都可以使用,而protected表明这个变量只能在本类或子类中使用。
所以,如果我们想要使用这个成员变量,可以把它定义成public,但对于面向对象编程来说这不是个好的编程习惯,因为它破坏了类的封装性,在c++里好的方法是再定义公共函数来存取这个私有变量,而c#里提供了一个更加方便的方法,那就是属性(property),现在我们把这个属性Title加上:
//属性
publicstringTitle
get
returnthis.m_strTitle;
set
this.m_strTitle=value;
让我们来看看如何定义属性,首先同样需要作用域限定符,通常我们使用public,表明任何地方都可以使用该属性,其次有两个关键字需要注意:
this和value,this代表类本身,所以this.m_strTitle就是代表本类的成员变量m_strTitle,value代表当这个属性作为左值时等号右边的值,象这样:
myClass.Title="
hello"
那么value的值就是"
好了,这个类已经可以使用了,象下面:
publicstaticvoidMain(String[]args)
MyClassmyClass=newmyClass();
//构造MyClass类的一个实例
Console.WriteLine(myClass.Title);
//结果是:
我已经被赋初值了
我的值改变了"
//改变Title属性的值
Console.Writeline(myClass.Title);
//这时结果变成:
我的值改变了
好了,现在让我们给这个类加上一个MyMethod方法,这个方法没有返回值,带一个字符型参数。
//方法
publicvoidMyMethod(stringa_str)
this.m_strTitle=a_str;
这是我们可以改写一下刚才那个程序,运行结果同刚才一样:
myClass.MyMethod("
);
二、即时聊天工具的设计思路
1.问题描述及实现功能和总体设计思路
时下腾讯QQ即时通讯软件的应用如火如荼,只要上网的人都知道QQ,几乎得上网的人都拥有自己的QQ号甚至是多个,如今QQ成为中国网民最喜欢的通讯软件了,当年只有很简单的功能,经过几年的发展升级变成了今天超级强大的功能了,当然还有类似的国内通讯软件,如新浪的UC软件等。
1.1问题描述
模拟QQ即时聊天工具设计一套网络聊天应用程序,按照C/S结构分别设计服务端程序和客户端程序。
现在腾讯QQ的功能超级强大,要完全现实它的功能不是一两个人一两天能够完成的任务,基于时间和开发人员只有本人的情况下,所以选择一部分最常用的功能实现。
设计的程序界面友好简单易用。
1.2实现功能
1.2.1服务器端功能
服务器端主要功能就是通过图形界面来维护服务器的信息,包括服务器运行信息的即时显示;
手动启动和停止服务器的运行;
查看现有群以及每个群有的成员;
查看所有注册用户以及是否在线;
清除服务器信息;
服务器后台运行;
保存和加载服务器信息等。
1.2.2客户端功能
客服端主要实现的功能有:
用户注册;
用户登陆;
用户下线;
程序运行的动态信息显示;
添加好友;
和好友聊天;
删除好友;
加入群;
创建群;
退出群;
群聊;
资源共享;
下载共享资源;
文件传输;
实时监听好友是否传输文件等。
1.3设计思路
1.3.1总体架构思路
此程序要求设计客户端和服务器端,主要解决的问题就是客户端和服务器端的通信以及客户端和客户端的通信。
因为涉及到通信的内容很多,例如登陆信息,注册信息,聊天信息等等。
怎样识别不同的信息需要自己设计通信协议,及根据每次收到的信息的不同做相应的处理。
所以自己定义了许多通信消息的类型,以便准确完成通信。
1.3.2服务器端
服务器运行开始等待客户端的登陆以及注册信息,当有客户端要求通信时,便对客户端信息做保存并更新服务器信息。
对于每一个客服端都建立一个相应的通信套接字并实时异步监听客服端是否有动作。
服务器端的主要作用就是维护客服端的信息以及中转必要的通信信息,例如对于客户添加好友,服务器端就需要转发客服端的求情信息到另外一个客户端。
另外一点设计思路就是通过图形界面来操作服务器。
1.3.3客户端
客户端主要根据用户的使用信息即时相应消息,然后根据不同的信息发送不同的信息到服务器端,开始和服务器端通信。
客户端在登录成功以后便建立自己的本地服务器,方便自己共享资源以及可以直接和好友聊天儿不必每次发送信息都需要通过服务器中转,一般情况下首次发送的信息由服务器中转,之后都是直接通信了。
这样可以减少服务器端的负载,让服务器运行更稳定,以及支持更多的客服端数量。
客服端需要实时监听好友是否上线的信息,如果好友上线了应该即时得到通知。
同样客服端也实时显示程序运行的信息,这对于开发人员尤其关键和重要,因为可以根据这个来了解程序是否运行正常。
2.详细设计思路
2.1通信协议设计
2.1.1消息类型:
//消息类型
enumMSGType
{
enroll,check_name,login,add_friend,single_chat,group_chat,invalid_name,
invalid_password,already_login,success,fail,establish_group,join_group,
secede_group,single_chat_server,single_chat_client,single_chat_transfer,
offline,client_list,group_list,member_list,server_address,full,leave_word,
addfriend_exist,addfriend_error,offline_error,friend_data,group_data,
addfriend_success,addfriend_fail,joingroup_success,joingroup_fail,
secedegroup_success,secedegroup_fail,establishgroup_success,
establishgroup_fail,delete_friend,search_file,search_return,search_null,
down_file,declare_file,declare_success
};
每种消息具体说明如下:
enroll:
用户注册
check_name:
检查用户名是否可用
login:
用户登陆
add_friend:
添加好友
single_chat:
单聊
group_chat:
群聊
invalid_name:
无效用户名
invalid_password:
无效的密码
already_login:
已近登陆
success:
成功
fail:
失败
establish_group:
建立群
join_group:
加入群
secede_group:
退出群
single_chat_server:
接收私聊时对方发送过来的信息
single_chat_client:
从服务器接收到好友的addr
single_chat_transfer:
从服务器接收到中转的信息
offline:
下线
client_list:
请求客户好友信息
group_list:
请求客户群信息
member_list:
请求群成员信息
server_address:
服务器地址
leave_word:
留言
addfriend_exist:
好友已经存在
addfriend_error:
添加好友出错
offline_error:
下线出错
friend_data:
好友数据
group_data:
群数据
addfriend_success,:
添加好友成功
addfriend_fail:
添加好友失败
joingroup_success:
加入群成功
joingroup_fail:
加入群失败
secedegroup_success:
退出群成功
secedegroup_fail:
退出群失败
establishgroup_success:
建立群成功
establishgroup_fail:
建立群失败
delete_friend:
删除好友
search_file:
收索文件
search_return:
收索返回
search_null,收索为空
down_file:
下载文件
declare_file:
共享文件
declare_success:
共享成功
服务器和客户端就是通过这些信息类型来通信的。
2.1.2消息结构体设计
structmessage
MSGTypetype;
//消息类型
charname[MaxNameContent+1];
//消息名称
charmsg[MaxMsgContent+1];
//消息具体内容
//重载复制操作符
voidoperator=(constmessage&
b)
type=b.type;
strcpy(name,b.name);
strcpy(msg,b.msg);
每次客服端和服务器的通信都是发送这样的结构体数据信息。
2.1.3群留言信息结构设计
//群的留言1.群名,2.发言人名,3.发言内容,
structword
chargroupName[MaxNameContent+1];
charclientName[MaxNameContent+1];
charleaveWord[MaxMsgContent+1];
voidoperator=(constword&
strcpy(groupName,b.groupName);
strcpy(clientName,b.clientName);
strcpy(leaveWord,b.leaveWord);
2.2通信模块软件设计
2.2.1注册模块
客服端在填写好完整的注册信息以后就发送注册用户类型的消息到服务器端,服务器端接收到注册信息以后做相应的处理,如果成功就保存客户信息。
2.2.2登录模块
客服端发送登录信息到服务器端,服务器端根据用户名和密码检查是否成功登录,如果登录成功的话,就需要将客户的信息发送给客户端,具体有好友信息,用户加入的群信息等。
如果登录成功客户端接收服务器发送给客服端的好友和群等信息并在界面中显示出来。
2.2.3下线模块
客服端发送下线请求的信息到服务器端,服务器端接到此信息以后把此用户状态改为离线。
服务器端返回下线操作是否成功。
2.2.4添加好友模块
客户端可以请求服务器所用的用户信息并显示出来,客户端可以选择某一个用户向服务器端发送添加此用户为好友的信息。
服务器接收到添加好友的信息以后查找被添加的用户,如果找到就发送一条有用户添加他为好友的信息,如果对方不在线服务器就直接返回一条此用户不在线的信息给添加好友的用户。
如果被添加的用户在线并且接受请求,那么服务端就更新用户信息,将他们互相添加为好友信息。
2.2.5好友聊天模块
客服端选择一个好友向服务器发送聊天请求,服务器在他们没有互相建立以前中转他们的发送聊天信息。
一旦他们建立连接以后服务器就不作用了。
如果对方不存在就把信息存放起来,等到对方上线以后再转发给改用户就可以了。
2.2.6删除好友模块
客户端选择一个需要删除的好友,然后向服务器发送删除好友的信息,服务器接受到信息以后向对方发送删除好友的信息已通知对方,后然更新服务器信息,解除次二人的好友关系。
通知双方好友关系已解除。
2.2.7加入群模块
此模块的设计同添加好友模块类似。
2.2.8创建群模块
这个模块的功能和用户注册模块类似。
2.2.9退出群模块
此模块的设计同删除好友模块类似。
2.2.10群聊模块
此模块的设计同聊天模块类似,只不过是以群为单位开始聊天,同样没有在线的用户就以后登录接收到此聊天信息。
2.2.11资源共享模块
客服端作为本地服务器可以共享资源,共享的资源在服务器端由记录。
当其他好友收索到共享的资源以后就可以下载了。
2.2.12资源下载模块
每个用户可以登录以后可以收索有哪些共享资源,并且可以下载到本地。
2.3服务器界面模块设计
2.3.1运行信息显示模块
此功能在程序中的各个模块中都有涉及到,每次服务器的操作信息动态的显示到界面中来就可以了。
此功能模块有助于程序员了解服务器程序是否运行正常。
2.3.2群信息以及群成员显示模块
将所有的群都显示到列表框中,在单击每一个群的时候在另一个列表框中显示此群有哪些成员用户。
2.3.3用户信息显示模块
根据用户是都在线分别显示所有用户的情况,在线的用户显示到在线的列表框,离线的显示在离线对话框。
2.3.4其他功能模块
其他的很多按钮功能,点击某一个按钮实现相应的功能。
主要有启动和停止运行服务器;
保存服务器现在的信息到数据文件,从数据文件加载服务器信息;
以及清空服务器信息等。
2.4客服端界面模块设计
2.4.1注册模块
需要填写用户名和密码,可以发送注册信息。
2.4.2登录模块
根据填写的用户名和密码发送登录信息,可以调用注册模块注册。
2.4.3添加好友模块
从服务器端获取所有用户并显示用户信息到列表框中,选中某一用户发送请求。
2.4.4单