基于TCPIP协议的网络通信应用程序课程设计报告.doc
《基于TCPIP协议的网络通信应用程序课程设计报告.doc》由会员分享,可在线阅读,更多相关《基于TCPIP协议的网络通信应用程序课程设计报告.doc(30页珍藏版)》请在冰豆网上搜索。
华南农业大学理学院
(计算机网络)
课程设计
实验时间:
2010学年第二学期
专业年级:
2008级应数2班
实验题目:
基于TCP/IP协议的网络通信应用程序
学生姓名:
王晓珊学号_18_自评成绩_95教师评成绩___
学生姓名:
黄如萍_学号06_自评成绩_95_教师评成绩___
学生姓名______学号____自评成绩____教师评成绩___
学生姓名______学号____自评成绩____教师评成绩___
指导老师:
黄小虎
基于TCP/IP协议的网络通信小应用程序
1.课程设计的题目及要求
1.1课程设计题目
掌握基于TCP/IP协议实现网络通信,理解TCP与UDP的不同特性以及实现方式。
课程设计要求建立一个基于TCP/IP协议的网络通信小应用程序,实验可采用UDP或TCP,建议基于WINDOWS平台。
1.1.1功能要求
建立一个基于中心服务器方式即时数据通信平台(IM)。
要求如下(*为选做内容):
1.能进行用户管理,所有用户必须登录到服务器,由服务器维护在线信息。
2.IM(InstantMessage)功能:
用户登录后能进行实时多方点到点短信息通信,如聊天;
3.能选择要求服务器进行转发服务;
4.能保存通信记录到数据库(SQLServer或其他桌面型数据库);
5.能进行双方文件传输,能显示进度;
6.支持断点重传。
(检查时需有功能随时中断传送,并在下次启动能显示重传状态);
*7.数据包加密;
8.实时语音双向传送功能;
*9.多方通话功能;
10.界面设计要求布局合理,信息清晰。
1.1.2对于所有功能的要求
1)要求清晰描述所设计的应答机制,数据包格式,所用数据结构及其相应算法,机密机制等;
2)对于功能实现要求描绘实现方法,流程。
2.开发工具、软硬件环境简介
2.1开发工具
开发工具:
MicrosoftVisualStudio2008
2.2软硬件环境
2.2.1软件环境
l操作系统:
WindowsXP/Windows7
l开发软件:
MicrosoftVisualStudio2008
l开发语言:
C#语言
l平台:
Microsoft.NETFrameworkv2.0
2.2.2硬件环境
l分辨率:
1000×750
l服务器:
PentiumIII500以上或更高;
内存:
128M以上;
硬盘:
至少40G以上;
l工作站:
PentiumII266以上微机;
内存:
64MB
硬盘:
至少5G以上;
3.程序实现的基本思想
3.1程序设计分析
本设计实现的基于TCP/IP协议的网络通信小应用程序,实际上是一个基于Socket的聊天室。
聊天室主要由聊天室服务器和聊天室客户端组成。
聊天室服务器负责管理和客户端连接并发送消息给客户端;聊天室客户端负责接收或者发送聊天消息,登录聊天室服务器等。
一个聊天室服务器应该支持多个聊天室客户端进行同时连接。
聊天室服务器和聊天室客户端之间根据聊天协议进行通信。
3.2基本思想
程序的实现主要分为两大部分,即服务器部分和客户端部分。
程序首先设计聊天室的服务器,再设计客户端部分,最后生成可执行文件。
1.服务器
服务器端管理着聊天任务,它维持着一张当前在线用户的列表,转发用户发送来的消息。
设计思想如下:
3)利用控件设计窗体;
4)功能实现;
Ø监听本机IP地址中的一个指定的端口;
Ø当有客户端向该端口发出请求时,服务器程序立刻建立一个与该客户端的连接并启动一个新的线程来处理该客户端;
Ø根据客户端发送来的各种不同的请求,执行相应的操作,并将结果返回给客户端。
5)运行调试。
2.客户端
客户端应用程序包含用户登录窗口和用户聊天的主窗口,它允许用户登录到服务器,可以向服务器发送消息,同时可以接收从服务器返回的信息。
1)设计登录窗体和聊天窗体;
2)基于课程设计的要求实现各窗体对应的功能;
Ø向服务器发送连接请求;
Ø得到服务器程序的确认后,建立与服务器的连接,并获得与服务器交互的流通道;
Ø通过网络流通道与服务器端的程序进行数据通信。
3)运行调试。
4.系统功能框架图、系统流程图
4.1功能框架图
图1功能框架图
4.2系统流程图
图2系统流程图
5.具体实现过程
5.1设计准备
5.1.1TCP的运用
客户端只能和服务器通信,无法和另外一个客户端直接通信。
为了使两个客户端能相互通信,所有的客户一律先把聊天信息发给服务器,并告诉服务器改信息是发送给哪个客户的,服务器收到信息后,再将该信息转发给另外一个客户。
本设计的实现主要用了TcpListener类用于用于侦听和接受传入的连接请求。
基本方法:
表1TCP连接基本方法
TcpListener类基本方法
作用
Start
启动监听
Stop
关闭TcpListener并停止监听请求
AcceptSocket
在同步阻塞方式下获取并返回一个用来接收和发送数据的Socket对象,同时从传入的连接队列中移除该客户端的连接请求
5.1.2Socket套接字的运用
本设计中自定义了通信程序的可识别命令(见以下第三小点),即自定义的简单协议。
故程序中为支持自定义的协议,采用套接字来实现。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为服务器监听,客户端请求,连接确认三个步骤。
n服务器监听:
服务器套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
n客户端请求:
由客户端的套接字提出连接请求,要连接的目标是服务器的套接字。
为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器套接字的地址和端口号,然后再向服务器套接字提出连接请求。
n连接确认:
当服务器套接字监听到客户端套接字的连接请求时,它就响应客户端套接字的请求,把服务器套接字的信息发给客户端,一旦客户端确认了此信息,连接即可建立。
而服务器套接字继续监听其他客户端套接字的连接请求。
服务器和客户端必须分别进行编程,它们之间的连接如下图所示。
图3服务器与客户端的连接图
5.1.3通信程序中可识别命令的定义
程序中定义的可识别命令格式为两个一位整数拼接成的字符串,每位的含义如下:
第一位第一位为0:
客户机向服务器发送的命令
第一位为1:
服务器向客户机发送的命令
"01"-离线
"02"-请求在线列表
可以识别的命令格式"03"-请求对所有人闪屏振动
第二位
服务端"04"-请求对指定用户闪屏振动"05"-请求广播消息
"06"-请求对指定用户发送文件
要求转发给指定用户的用户名:
转发给指定用户
"11"-服务器要求客户机更新在线列表
客户端"12"-服务器要求客户机做闪屏振动
default-接受用户消息或者系统消息的正文
6.服务器具体设计
6.1.1窗体设计
新建一个Windows窗体,命名为Form1.cs,主要用于连接服务器。
只有建立了聊天室服务器,客户才能连接到上面,从而进行聊天。
服务器建立之后,一般处于监听状态,等待客户机的连接申请。
窗体用到的主要控件如下表所示。
表2主要控件
控件类型
控件名字
用途
按钮
两个按钮,分别用于连接服务器和退出连接
标签
两个标签,一个为“端口号”,另一个为显示“默认端口号”
文本框
两个文本框,一个用于用户输入端口号,另一个用于显示服务器连接等系统消息
图4窗体设计图
6.1.2编码
1)创建服务器
这部分程序的编写主要是实现“获得有效的端口号和IP地址”,设计要点:
l自动获取IP地址
IPAddress_ip=newSystem.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);
l可以自主选择是否输入端口号
端口号是进程的标识,端口号范围从0到65535。
由于1000以内的端口大多被标准协议占用,所以程序中可以自由使用的端口号一般都用大于1000的值。
若输入端口号,程序设置了有效端口号的范围为1023与65535之间。
若端口有效则连接服务器,并提示相应的信息;
默认端口号设置为8888
若没有输入端口号,或者端口号无效,则程序自动使用默认端口号连接服务器。
代码如下:
privatevoidbutton1_Click(objectsender,EventArgse)
{this.button1.Enabled=false;
stringportParam;
portParam=textBox_port.Text;
if(portParam!
=string.Empty)
{if(!
int.TryParse(portParam,out_port)||_port<1023||_port>65535)
{
_port=8888;
textBox1.AppendText("端口号不合法,默认端口号被接受!
");
}}
textBox1.AppendText("服务器已启动,正在监听...\n");
textBox1.AppendText(string.Format("服务器IP:
{0}\t端口号:
{1}\n",_ip,_port));
_tcpl=newTcpListener(_ip,_port);
_tcpl.Start();
trd=newThread(newThreadStart(this.ThreadTask));
trd.Start();
}
2)线程监听和执行
由服务器和客户端的聊天室模型可以看出,服务器跟客户端的连接以及客户端之间的连接都是通过执行流实现的,即每一个独立的执行流都是一个线程。
编写线程监听和线程执行体监听来自多个客户端的请求。
l线程监听
在创建服务器代码中,可以看到若输入端口号有效,则执行TcpListener类侦听和接受传入的连接请求,并开启线程调用ThreadTask方法。
ThreadTask方法要点: