欢迎来到天天文库
浏览记录
ID:22402546
大小:47.00 KB
页数:9页
时间:2018-10-29
《软件设计大赛作品说明书》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、软件设计大赛作品说明书新苑聊天室设计说明设计人班级:06473设计人姓名:邢振雨作品简介本作品是为了锻炼自己能力及参加软件设计大赛而设计的,目的是为了给大家提供一个相互交流的平台,力求简洁实用,注重效率。本程序提供了上线下线自动通知,悄悄话,用户管理,屏蔽发言等基本功能。需求分析经过深入研究,一个好的聊天室软件,至少需要实现以下功能:客户端:可以登陆,正常聊天,发送多媒体信息,悄悄话,屏蔽发言,获知在线用户列表,管理员可以对用户进行授权、踢人等操作,最好有视频音频功能。服务器端:能够应对较大的数据流量,
2、性能稳定,随时获得聊天室状态,控制用户连接等功能。由于时间仓促以及经验不足,所以我去掉了一些相对不太重要的功能,比如发送多媒体信息、视频音频等,另外计划内的一个一发多收的文件传送功能也没有加上,虽然有些遗憾,但是程序还是具有了聊天室的基本功能。在程序设计时,考虑到设计此程序的主要目的是锻炼自己,也为了增加程序灵活性,所以我没有使用封装的tcpclient等类,而是完全用socket套接字手工实现,后台数据操作也没有使用backgroudworker,而是手工操作线程,在解决跨线程操作问题时,自己学到了不
3、少东西。我的设计思路为:服务器端确定最大连接数后,开始监听客户端连接,客户端确定服务器ip和端口号后,输入昵称连接服务器,将昵称发送到服务器,服务器将在线用户列表返回,客户端接收到列表后将列表添加到列表框中,进入接收循环。同时服务器端将该昵称加特殊标记发送给其他在线用户,客户端识别出标记后,将该昵称添加到列表框中。登陆成功以后,可以选择对谁说,以及悄悄话,另外本程序服务器端也可以参与聊天,当某用户退出以后,服务器获得该用户标示,将该标示加特殊标记发送其他在线用户,客户端接收到该消息并识别出标记后,刷新在
4、线用户列表,并在窗口上显示提示信息。服务器端随时显示最大连接数及在线用户数,由于本程序没有提供用户名及密码登陆,所以将对用户的控制功能交给了服务器端,在服务器端双击用户昵称,就可以将该用户踢下线。而在客户端双击用户昵称可以屏蔽该用户的发言,再次双击可以解除。另外,一时兴起,留了个后门,即无法屏蔽别人对自己的悄悄话。客户端主要发送代码:privatevoidsends_Click(objectsender,EventArgse){try{Byte[]mess=newByte[1024];if(checkB
5、ox1.Checked)//悄悄话{mess=Encoding.Unicode.GetBytes("@@only@@"+userlist.Text+"[悄]"+nickname.Text+"对你说:"+setmess.Text);}else{mess=Encoding.Unicode.GetBytes(nickname.Text+"对"+userlist.Text+"说"+":r"+setmess.Text);}conn.BeginSend(mess,0,mess.Length,SocketFla
6、gs.None,newAsyncCallback(sendcall),conn);this.setmess.Clear();}catch(Exception){MessageBox.Show("没有连接");}}客户端接收主要代码:voidrecevice(IAsyncResultar)//异步接收{Thread.CurrentThread.IsBackground=true;线程设为后台stateobjectrstate=(stateobject)ar.AsyncState;Socketp=rstat
7、e.worksoc;try{intreadlen=p.EndReceive(ar);stringmes=Encoding.Unicode.GetString(rstate.mess);mes=mes.Substring(0,mes.IndexOf(" "));rstate.mess=newByte[1024];if(mes.Substring(0,4)=="@@@@")//添加用户{stringtemp=mes.Substring(4);settextd=newsettext(adduser);thi
8、s.Invoke(d,newobject[]{temp});}elseif(mes.Substring(0,6)=="(*)(*)")删除用户{mes=mes.Substring(6);userlist.Items.Remove(mes);mes=mes+"已离开聊天室或被管理员踢出";}elseif(blacklist.ContainsKey(mes.Substring(0,mes.IndexOf("对"))))//昵称是否在黑名单{}e
此文档下载收益归作者所有