四川师范大学成都学院计算机网络编程实训报告
图4.2-6 用户运行界面
5总结与展望
5.1总结
本文主要对局域网聊天系统的思考与设计做出了一些阐述,对总体思考到具体实现都做了比较详细的阐述,使用户能基本了解设计思路以及具体实现过程。
聊天软件的设计与开发不是单单我一个人所做,我们是一个组讨论做出来的,在这段时间,我们将老师那边学到的知识加上网上查阅这方面的知识,最终做出了这样类似的一个聊天软件,在这个设计过程中,我认识到设计和开发一个软件是一项复杂的工程,需要前期预研,前期设计,模块设计,编码,调试,再编码,再调试等复杂的流程,缺一不可。特别是当程序发生错误时,不停的修改和调试,其实是很无味的,但是事后想来又是很精彩的过程。我深刻的感受到由于前期设计不够系统化,不够细致,导致后期代码的开发与维护显得很费力,出现了大量的冗余代码,并且类与类的依赖性太强,扩展性不足,今后需要着重加强这些方面的学习与积累。
5.2展望
转眼学生阶段就要划上句号了。通过这次毕业设计,我更深刻的认识到了教学实践在大学课程中的重要性,同时也发觉到了自己在学习方面存在的不足之处,在以后的学习中我会努力改进这些不足、不断提高自己的动手实践能力!
11
四川师范大学成都学院计算机网络编程实训报告
这次实验是在边学习边实践的基础上完成的,通过学习“计算机网络编程”,我们对网络的基础知识打下了很好的基础。这次网络实验可以说是在理解网络的基础上对编程的一次学习过程,虽然做的不是很完善,但也学到了很多知识。例如,vs2008的使用和对c#语句的理解都有了很大的提高。这对自己以后进行网络开发有很大的帮助。
12
四川师范大学成都学院计算机网络编程实训报告
致谢
本软件从分析,到设计,最后到得以实施,非常感谢那些对该项目提供过帮助的人们。
首先,特别感谢我的导师王敏老师,在该软件的整个规划实施前给予了我悉心的指导和耐心的讲解,使我在设计中始终把握关键方向,最终完成整个系统。
其次,感谢各位老师和同学在我系统设计中给我提出的一些指导性建议及技术支持。
最后还要感谢学校各位领导对我这几年的悉心教育,给予我充分展现自我和发展自我的平台。
13
四川师范大学成都学院计算机网络编程实训报告
附录
#endregion
#region Receive_events
private void ReceiveData() {
IsValidPort(txtPort.Text); try {
int port = int.Parse(txtPort.Text); udpClient = new UdpClient(port); //必须使用组播的地址范围内的地址 IPAddress groupIP = IPAddress.Parse(groupIPaddress.Text);
//50为生存时间,超时被丢弃
udpClient.JoinMulticastGroup(groupIP, 50); } catch { }
IPEndPoint remote = null;
//接收从远程主机发送过来的信息 while (true) {
try {
//关闭udpClient时此句会产生异常
byte[] bytes = udpClient.Receive(ref remote); string address = remote.ToString(); int atIndex = address.IndexOf(\
string memberaddress = address.Substring(0, atIndex); //执行委托
cbxChoose.Invoke(set_combobox_callback, memberaddress); string str = Encoding.UTF8.GetString(bytes, 0, bytes.Length); AppendString(string.Format(\来自{0}:{1}\ } catch {
break; //退出循环,结束线程 } } }
#endregion
#region IsValid_field
14
四川师范大学成都学院计算机网络编程实训报告
public void Terminate() {
udpClient.DropMulticastGroup(m_GroupAddress); }
//检测输入对方IP有没有效
private void IsValidIP(string str) {
IPAddress ip;
if (!IPAddress.TryParse(str, out ip)) {
MessageBox.Show(\非法IP地址\ return; }
}//检测端口号有没有效
private void IsValidPort(string str) {
int isPort;
if (txtPort.Text == \ {
MessageBox.Show(\端口号不能为空\ return; }
else if (!int.TryParse(str, out isPort)) {
MessageBox.Show(\端口号无效\ return; }
else if ((isPort < 1024) || (isPort > 65335)) {
MessageBox.Show(\端口号应该大于或等于1024,小于或等于65535\
return; } }
#endregion
#region tray_field
private void chat_Load(object sender, EventArgs e) {
btnChat.Enabled = true; btnStop.Enabled = false; txbSend.Enabled = false;
cbxChoose.SelectedIndex = -1;
//在当前窗体的容器中创建托盘图标NotifyIcon的实例 myNotifyIcon = new NotifyIcon(this.components);
15