面向
TCP Socket
编程
计算机网络程序设计
实验报告
实验题目: 面向
TCP Socket
编程
学 院 计算机 学 院
专 业 网络工程
班 级
姓 名
学 号
2012 年 月 日
一、实验名称
面向
TCP Socket
编程
二、实验目的和要求
•
熟悉和掌握网络编程的基本方法和步骤;
•
进一步理解
client/server
交互模式;
•
加深学生对于网络协议概念的理解以及协议的设计和实现方法
三、开发环境
操作系统
: window7
编程工具
: eclipse
Ip
地址:
10.2.41.58
四、实验内容和结果
1、程序整体功能
3 . NCSP 应用层协议
3.1 NCSP Server 的功能
• 当接收到 client 发送的 GETCOURSE 协议消息,返回该用户已经选择的
所课程名字;
• 当接收到 client 发送的 SETCOURSE 协议消息,记录用户名和课程名,
以便 client 使用 GETCOURSE 命令查询;
• 当接收到 client 发送的 SHUTDOWN 协议消息,检查用户是否有此权限,
如果有则结束 server 程序。
3.2 NCSP Client 的功能
允许用户选择要发送的协议消息及其附带参数,然后向 server 发送
GETCOURSE 、 SETCOURSE 或者 SHUTDOWN 命令之一,并从
server 得到应答结果,显示给用户。
3.3 NCSP 协议
本次实验所要实现的网络选课程序,其核心是 client 和 server 之间所遵从
的共同协议: NCSP 协议。下面我们详细描述该协议。
3.3.1 GETCOURSE
GETCOURSE 命令由 client 发送给 server ,它由一个 ASCII 字符串组
成:首先是“GETCOURSE ”,然后紧跟着一个空格( space ),然后是用
户名,最后是换行符( '\n' )。 client 然后等待服务器应答:如果返回的是“
401 User does not exist ”字符串 ,说明该用户还没有选择课程;如果
返回的是“200 OK ”字符串,说明该用户已经选择了课程, client 继续接收
server 发送的课程消息,每一门课程名是一个字符串,当接收到“ . ”字符串
时,说明课程名发送完毕。 Client 断开连接,重新接收用户输入。
当 server 接收到 GETCOURSE 命令,它解析出用户名,然后检索该用户
是否已经选择了课程,如果没有,则返回“ 401 User does not exist ”字
符串,关闭连接;如果用户选择了课程,则返回“ 200 OK ”字符串,然后将
用户选择的课程名返回给 client ,由于用户可能选择了多门课程,因此每一
门课程名作为一个字符串返回给 client ,当课程名都发送完毕,发送“ . ”字
符串作为结束标志。然后断开连接,重新监听新的 client 的连接请求。
当 server 解析 GETCOURSE 命令,发生错误时,返回“ 300 Message
format error ”字符串。
下面是 client 和 server 的交互:
C: GETCOURSE XT
S: 200 OK
S: Computer Network
S: Database Principle
S: Java Language
S: .
3.3.2 SETCOURSE
SETCOURSE 命令由 client 发送给 server ,它由一个 ASCII 字符串组
成:首先是“SETCOURSE ”,然后紧跟着一个空格( space ),然后是用
户名,最后是换行符( '\n' )。 client 然后等待服务器应答:如果返回的是“
301 User exists ”字符串,说明该用户已经选择了课程(这里我们假设用
户必须一次选择好课程,不能更改);如果返回的是“ 200 OK ”字符串,说
明该用户还没有选择课程,可以选课。 Client 将用户输入的课程名发送给
server ,每一门课程名是一个以换行符 '\n' 终结的字符串,当课程名都发送
完毕,发送“ . ”字符串作为结束标志。然后 Client 断开连接,重新接收用户
输入。
当 server 接收到 SETCOURSE 命令,它解析出用户名,然后检索该用户是
否已经选择了课程,如果已经选择,则返回“ 301 User exists ”字符串,关
闭连接;如果用户还没有选择课程,则返回“ 200 OK ”字符串, server 继
续接收 client 发送的课程消息,每一门课程名是一个字符串,当接收到“ . ”
字符串时,说明课程名发送完毕。 Server 将用户名和其选择的所有课程存储
起来,然后断开连接,重新监听新的 client 的连接请求。
当 server 解析 SETCOURSE 命令,发生错误时,返回“ 300 Message
format error ”字符串。
下面是 client 和 server 的交互:
C: SETCOURSE XT
S: 200 OK
C: Computer Network
C: Database Principle
C: Java Language
C: .
3.3.3 SHUTDOWN
SHUTDOWN 命令由 client 发送给 server ,它由一个 ASCII 字符串组
成:首先是“SHUTDOWN ”,然后紧跟着一个空格( space ),然后是用
户名,最后是换行符( '\n' )。 client 发送完毕后,接收 server 的响应结
果,显示在屏幕上,然后关闭连接。
当 server 接收到 SHUTDOWN 命令,解析出用户名,如果此用户没有关闭
server 的权限,则返回“ 201 User not allowed to execute this
command ”字符串;如果此用户具有关闭 server 的权限,则返回“ 200
OK ”字符串,然后关闭连接,结束 server 程序。
当 server 解析 SHUTDOWN 命令,发生错误时,返回“ 300 Message
format error ”字符串。
下面是 client 和 server 的交互:
C: SHUTDOWN XT
S: 200 OK
4 .编程提示
• 可以采用文本或者图形界面(GUI )进行输入和输出;
• 协议命令的打包和解析是编制程序要考虑的关键问题之一;
• server 采用什么样的数据结构存储用户及其所选择的课程名也是编制程序
要考虑的关键问题之一。为了简化程序,可以规定一个用户最多选择的课程数。
2、设计思路说明
通过分析
:GETCOURSE SETCOURSE SHUTDOWN 三条指令。过程都在上文档中有
说明,再结合老师上课讲到的,http 协议的程序,并对其做了修改,就完成了这个 NCSP
协议程序的编写。
测试时
:请先在程序工程里建立一个以 *.txt 结尾的文件,作为客户的保存信息文件。
3、重要类、数据结构、模块/函数算法说明
服务器方用到的类:
1.Java 里面的类库:
ServerSocket, socket,Thread, DataOutputStream,
DataInputStream,
InputStream,OutputStream,File,StringTokenizer。
2.自定义类:NCSPRequestHandler
客户机方用到的类:
Socket,DataOutputStream,DataInputStream,InputSt