网络编程(a)实训报告。
基于vc#的群讨论工具的程序设计。
2010-2011学年第2学期。
姓名。学号
班级。时间 2011.6.27—2011.6.29
郑州轻工业学院计算机与通信工程学院。
2024年6月29日星期三。
目录。1概述 2
2功能分析 2
2.1 程序功能描述 2
2.2 程序功能分析 2
3 程序设计 3
3.1 程序总体设计 3
3.2 各模块功能设计 4
3.3 主要数据设计 4
3.4 主要函数设计 4
4 程序编码实现 5
4.1 程序运行步骤 5
4.2 主要功能函数实现 5
4.2.1 udpcomm的实现 6
4.2.2 客户端程序 7
4.2.3 服务器端程序 9
4.3 核心数据结构 11
5 程序测试 12
6 网络编程实训小结 16
课程设计时间:2011.6.27—2011.6.29
课程设计题目:基于vc#的群讨论工具的程序设计。
课程设计要求:1.能够熟练使用vs2008编程平台,熟悉平台菜单栏、工具栏和各种窗口的使用,掌握不同项目类型创建步骤和平台类库的使用。
2.熟练掌握c#创建程序功能所需的类、对象、接口等,并通过派生与继承实现**重用,通过事件与消息实现对象之间的交互。
4.按照软件工程的要求的功能分析、程序设计、**编写、程序调试、功能测试等步骤,完成群讨论工具的设计,并在基于udpclient的基础上实现对发送消息进行加解密的功能。
参加讨论者可以利用udpclient客户端程序加入讨论群组,并从服务器端获取加密密钥;然后可以利用该密钥对其与服务器端的传送数据进行加密;服务器会将每个参加讨论者发送过来的信息根据其与每个讨论者约定的密钥进行加密然后**给对应的讨论者。群组讨论工具客户程序采用了基于windows的实现方案。而服务器程序还是基于命令行的实现方式。
群组讨论工具的交互流程如图1所示。其中申**入群组的命令add和服务器接收请求并返回密钥的信息key都是以明文形式传递,在此基础上其他信息都是以密文形式传递。并且服务器与每个连接客户都单独维持着一个密钥。
图1通过程序的设计加深对课本知识的理解运用,在实际的设计中找到自己的不足,有助于我们今后的工作和生活,程序设计又是一个团体的工程,可以加深团队的合作意识,在相互帮助中扎实自己的知识体系。
在实现中,系统设计了六个类通过各个类的相互作用和交互进行通信,其中客户端程序包括主程序类udpclient和窗口类w_main;服务器程序主要包括服务器类udpserver和客户端信息类clientitem,udpcomm类包括symcryptography和数据编解码类udpcomm。
客户端程序包括主程序类udpclient和窗口类w_main实现客户端的发送消息功能和界面的设计。
服务器程序类中clientitem类中描述了客户端的ip地址和端口,以及加密实例信息。
udpcomm类中实现了客户端程序和服务器程序所需要的共性操作,包括对称加密类symcryptography和数据编解码类udpcomm,,以支持数据加密和解密。
整个程序包含了3个项目,即基于命令行的服务器程序项目udpserver、基于动态类库的公共程序类库项目udpcomm,以及基于windows的客户端程序项目udpclient。运行时首先启动服务器程序,然后不同计算机上的参与者便可以通过客户端程序加入讨论组,利用该讨论工具进行讨论。
而密钥则由程序随机生成,同时也可以通过属性key进行设置。以便确保在服务器和客户端程序中使用时两端的加密实例具有相同的初始向量和密钥。
客户端程序在申**入讨论组时,采用明文方式发送请求,同时服务器也以明文形式将密钥发送给客户端程序。在此基础上所有的传送信息都以密文形式传递。同时,客户端程序中引入了多线程技术实现对服务器所发送过来数据的接收、处理和显示,以方便用户与操作窗口的交互。
服务器程序采用命令行方式运行,其中引入了c里恩他item和arraylist来实现对所有连接的客户程序的管理。每个不同的客户程序对应不同的加密实例和密钥,以及加密实例都在服务器程序中保留,即不同的客户程序对应不同的加密实例和密钥。
首先服务器端启动服务,等待客户端的接入连接,如果没有客户端的请求服务,则服务器一直处于运行状态,一直等待客户端的连接请求,直到有客户端发送连接请求,服务端接受客户端发送来的请求,客户端加入讨论组,从服务器获取加密密钥;然后利用该密钥对其和服务器端的传送数据进行加密;服务端将每个参加讨论者发送过来的信息根据与其讨论者约定的密钥进行加密然后**给对应的讨论者。讨论组建立,有讨论者离开的时候服务器给出提示。
公共程序类库udpcomm:
public string encrypt(string plaintext)//加密。
public string decrypt(string cryptotext)//解密。
客户端程序:
private void listener() 接收数据。
private void displayreceivemessage() 显示接收数据。
private void button_send_click( )发送数据。
private void button_add_click( )加入讨论组。
private void button_del_click( )离开讨论组。
服务器程序:
static bool addmember(ipendpoint rep)//加入组。
static void delmember(ipendpoint rep)//离开组。
static void sendtomember(string buf)//组内**数据。
对称加密类symcryptography初始向量为固定值,在系统中随机生成密钥,保证在服务器和客户端程序中使用是两端具有相同的初始向量和密钥; 加解密函数对消息进行加解密操作。
public class symcryptography
public symcryptography()
public string encrypt(string plaintext)//加密。
byte plainbyte =
初始化参数。
m_ =getlegaliv();
创建加密实例。
icryptotransform cryptotransform = m_
创建内存流。
memorystream ms = new memorystream();
创建加密流。
cryptostream cs = new cryptostream(ms, cryptotransform,
通过加密流加密数据。
C 课程设计
自动走迷宫小游戏。根据课堂讲授内容,做相应的自主练习,消化课堂所讲解的内容 通过调试典型例题或习题积累调试c 程序的经验 通过完成辅导教材中的编程题,逐渐培养学生的编程能力 用计算机解决实际问题的能力。同时在设计的过程中发现自己的不足之处,对以前所学过的知识理解的更加深刻,掌握得更加牢固。迷宫生成。...
c 课程设计
哈尔滨 课程设计报告。课程 c 学号 姓名 班级 教师 1.管理系统的功能说明。课程信息管理 能够增加数据,删除数据,显示数据,修改数据,按姓名和首字母查询数据和一些基本的程序功能。2.存储数据的描述。coursenumber 课程号coursename 课程名subject 所属专业xingzhi...
C课程设计
面向对象程序设计课程设计。一 设计要求。1 课程设计以3 4人为一组,每人一个模块 2 课程设计时间为1周 在处理系统的时候,要从分析系统的需求入手,根据系统需求进行详细分析,明确系统功能,然后设计系统整体架构以及划分系统模块,按照模块分配小组中每个组员的具体任务,完成设计。二 系统设计规范。1 命...