成都工业学院计算机网络专周报告.docx
《成都工业学院计算机网络专周报告.docx》由会员分享,可在线阅读,更多相关《成都工业学院计算机网络专周报告.docx(10页珍藏版)》请在冰豆网上搜索。
成都工业学院计算机网络专周报告
成都工业学院
课程设计报告
课程名称
计算机网络课程设计
项目名称
基于Socket的网络聊天系统的设计与实现
姓名
陆海空
班级
1506041
学号
1501352247
指导教师
周行老师
设计时间
2016年12月12日至2016年12月16日
成都工业学院·计算机工程学院
一.需求分析 3
1.1开发背景 3
1.2功能要求 3
1.3运行环境 3
1.4功能实现 3
二.项目设计 4
2.1程序流程图 4
2.2概要设计 5
2.3功能设计 5
2.4详细设计 7
2.4.1界面设计 7
客户端 8
服务器端...................................................................9
2.4.2程序结构设计 8
三.代码及注释............................................................................9
3.1、客户端 9
3.2服务器端 15
四.课程设计小结 17
五.参考文献 17
一. 需求分析
1.1开发背景
随着网络技术不断成熟,人们对于网络的依赖程度不断提高,网络似乎成了生活中必不可少的存在。
由此而产生的聊天工具也在不断成长。
类似微信、QQ等网络聊天工具的发展日新月异。
但是,现有的聊天程序也仍然存在进步的空间。
QQ一直深受人们喜爱,随着版本的不断更新,虽然其功能不断增加不断完善,但始终有很多小问题有时让人难以忍受。
在使用过程中,不断的弹窗和广告对用户的使用照成了很大程度的影响。
因此我在本次课程设计的激励下,产生了一个制作类似QQ的网络聊天工具并且“无垃圾信息”洁净聊天工具的想法,虽然该工具不够完善,但是我希望通过制作本次程序能够更好地学习计算机网络知识。
1.2功能要求
(1)登录功能。
(2)用户可以通过服务器转发,实现私密聊天和多人聊天。
(3)实现抖动和声音提醒。
(4)服务器端和客户端程序都能实时显示在线用户人数。
(5)应该具有友好、易用、美观的图形界面。
(6)无垃圾,广告信息
(7)保存和删除聊天信息。
1.3运行环境
操作系统版本:
Windows1064位
软件版本:
Visualstudio2015
1.4功能实现
1.登录验证功能。
对于账号重复等异常,给予用户提示。
2.客户通过服务器转发,实现私密聊天和多人聊天。
3.实时显示目前其它用户的状态,能够提示在线用户人数和状态等。
4.保存并查看聊天记录。
5.申请新的用户号码。
6.易用、美观的图形界面,实现系统托盘。
7.收到信息时,能够收到声音等提示信息,发送端还能通过发送抖动,提示聊天的对方。
二.项目设计
2.1程序流程图
2.2概要设计
通过C#,实现网络聊天的功能,采用WindowsSocket编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,实行将所有信息发往服务器端,再由服务器进行分别处理的思路,服务器端是所有信息的中心。
由于服务器端要保存用户信息,我们利用数据库来实现这一功能,因此首先需要建立用户信息数据库。
在客户端保存聊天纪录和用户号码这一功能的实现中,采用了文件系统设计。
在信息到来及好友上线时,通过闪动托盘图标和播放不同的音乐进行提示。
建立消息链表来保存用户接收的各种消息。
2.3功能设计
客户端:
1)登录功能:
建立与服务器的连接并登录,能显示登录错误信息。
2)界面显示:
将在线好友显示在好友列表中,并实现系统托盘。
3)聊天功能:
与好友聊天。
4)聊天记录:
能保存聊天纪录,并能察看聊天纪录。
5)信息提示:
闪动托盘图标提示到来信息,并播放不同音乐来提示。
6)窗口抖动:
发送端提示聊天的对方。
服务器端:
向客户端发布系统消息。
接受来自客户端的信息并处理。
1)登录信息:
检查登录信息是否正确,并向客户端返回登录信息。
如信息正确,将在线用户发给该用户,并将该用户的状态发给各在线用户。
同时在服务器端显示。
2)聊天信息:
转发给消息指定的用户。
3)申请信息:
自动分配8位用户号码,并保存该用户,同时将信息返回给客户端。
4)用户下线:
将此用户下线消息发给各客户端,并改写用户在服务器端的状态。
程序中主要变量及函数的功能说明如下:
客户端:
privatevoidlogin_btn_Click(objectsender,EventArgse)---登陆到服务器
privatevoidsvrip_tb_TextChanged(objectsender,EventArgse)设置要连接的服务器的地址端口
privatevoidchatrcd_rtb_TextChanged(objectsender,EventArgse)--显示好友发送的信息
privatevoidsend_btn_Click(objectsender,EventArgse)----给好友发送信息
privatevoiduser_tb_TextChanged(objectsender,EventArgse)-----申请新的用户
privatevoidchatrcd_rtb_TextChanged(objectsender,EventArgse)----显示服务器消息
privatevoidmsg_tb_TextChanged(objectsender,EventArgse)-----显示消息输入文本
privatevoidnudge_pb_Click(objectsender,EventArgse)------发送窗口抖动
privatevoidbroadcast_rb_CheckedChanged(objectsender,EventArgse)------聊天模式的变更
privatevoidhide_cb_CheckedChanged(objectsender,EventArgse)-------最小化到托盘
服务器端:
用户及发送信息结构体类型:
publicvoidStartUp()-------服务器启动,并且实时更新用户在线信息
publicvoidGetConfig()------配置服务器端口号等信息
privatevoidThreadFunc(objectobj)-----系统对于发送消息、发送抖动等的异常的处理
publicvoidClose()--------关闭服务器
2.4详细设计
2.4.1界面设计
客户端
1)登陆界面
2)显示当前状态
3)最小化到托盘
4)发送抖动
5)聊天模式变更
6)发送接收消息
服务器端
1)服务器启动配置端口号
2)实时更新在线用户信息
2.4.2程序结构设计
1.客户端:
2.服务器端为控制台程序
三.代码及注释
3.1、客户端
a)登陆功能
privatevoidlogin_btn_Click(objectsender,EventArgse)
{
//验证数据合法性
if(!
ValidateInfo())
{
return;
}
intport=int.Parse(svrport_tb.Text);
//向服务器发出连接请求
TCPConnectionconn=newTCPConnection(_ipAddr,port);
TcpClient_tcpc=conn.Connect();
if(_tcpc==null)
{
MessageBox.Show("无法连接到服务器,请重试!
",
"错误",
MessageBoxButtons.OK,
MessageBoxIcon.Exclamation);
}
else
{
NetworkStreamnetstream=_tcpc.GetStream();
//向服务器发送用户名以确认身份
netstream.Write(Encoding.Unicode.GetBytes(user_tb.Text),0,Encoding.Unicode.GetBytes(user_tb.Text).Length);
//得到登录结果
byte[]buffer=newbyte[50];
netstream.Read(buffer,0,buffer.Length);
stringconnResult=Encoding.Unicode.GetString(buffer).TrimEnd('\0');
if(connResult.Equals("cmd:
:
Failed"))
{
MessageBox.Show("您的用户名已经被使用,请尝试其他用户名!
",
"提示",
MessageBoxButtons.OK,