
一 实验目的
1、 了解基于 Socket 的 C/S 编程的概念 ;
2、 掌握使用 Socket 开发程序的方法 ;
3、 了解常见的 Socket 开发模式的使用。
二 实验内容
在指定平台下,基于 SOCKET 开发一个简单的 C/S 通讯程序,使服务器端和客户机端能分别接收对方发送的文本信息并 显示。首先运行服务器端程 序,在 DOS 窗口对 应的目录下面输入“javac TalkServer.java”,编译成功输入“java TalkServer”,然后再打开一个新的 DOS 窗口,输入“javac TalkClient.java”,编译成功输入“java TalkClient”,
注意,首先运行的应该是 Server 端,然后才是 Client 端,顺序不能颠倒。如果先运行 Client 程序,那么 Server 端将无法找到服务器,就会出现异常,如图所示。
三 实验环境与分组
1 任意 JAVA 编程环境,推荐 eclipse;
2 两个同学一组,修改上个实验的服务器程序,并进行通讯实验。
四 实验原理
1、 Socket 概述
Socket(套接字)是一种于协议的网络编程接口,在 OSI 模型中,主要集中于会话层和传输层。Socket 接口定义了许多函数或例程,程序员可以用它们来开发 TCP/IP 网络上的应用程序。
Socket 最早源于 Unix,是一种在进程之间交换数据的机制。这个进程可以是一台计算机上的进程,也可以是通过网络连接起来的不同计算机上的进程。一个 Socket 套接字是通讯的一端,并有唯一的标识与之对应。一个正在使用的 Socket 套接字都有它的类型和与其相关的进程。当一个 Socket 连接建立以后,就可以在两个终端间传送数据,并且这里的数据交换是双向的。当其中一个终端关闭了当前的Socket 连接后,整个连接也同时中断。
Socket 接口在网络软件的开发上得到了广泛的应用,并被推广在多个操作系统平台上。Windows Sockets 是一个编程接口,它是在伯克利大学开发的套接字接口(Berkeley Socket Library)的基础上定义的。它包括了一组扩展件,以充分利用 Microsoft Windows 消息驱动的特点。规范的 1.1 版是在 1993年 1 月发行的,2.2 版在 1996 年 5 月发行。Windows 2000 支持 Winsock 2.2 版。在 Winsock2 中,支持多个传输协议的原始套接字,重叠 I/O 模型、服务质量控制等。
2、 客户-服务器编程模型
网络应用的标准模型是客户-服务器模型(Client/Server 模型,简称 C/S 模型)。这是一个不对称的编程模型,通讯的双方扮演不同的角色:客户和服务器。
一般发起通讯请求的程序被称为客户端,用户一般是通过客户端软件来访问某种服务。客户端应用程序通过与服务器建立联系,发送请求,然后接收服务器返回的内容。服务器则一般是等待并处理客户请求的应用程序。服务器通常由系统执行,在系统生存期间一直存在,等待客户的请求,并且在接收到客户的请求后,根据请求向客户返回合适的内容。它们之间的通讯过程如图所示。
请求
响应
响应
请求
这种 C/S 的通讯模型用途十分广泛,现在的大多数的网络程序都使用了这种模型。在服务器端,根据服务器处理请求方式的不同,服务器可以分为两种类型:
1) 循环服务器
这种模式在同一时间只能处理一个客户端的请求。服务器在接收到客户端的请求后进行处理,在处理完毕后才继续等待下一个请求的到来。如果在处理过程中有新的客户请求,将只能等待。这种模式通常只能用于处理速度较快、处理逻辑比较简单的服务器程序的开发,如 Linux 的事件服务器。
2) 并发服务器
这种模式在同一时间可以处理多个请求,服务器会建立多个处理客户请求的进程或者线程,在服务器接收到一个客户请求后,将按照一定的算法选择或者创建一个进程或者线程来处理这个客户请求,而服务器可以立即返回等待下一个客户请求的到来。显然这种处理模式可以尽量避免单处理模式中的对客户请求响应不及时的问题,但是这种模式需要占用较多的 CPU 处理时间和较多的系统资源,并且需要处理多个进程或者线程之间的通讯和数据共享,编程具有一定的复杂性。通常使用这种模式处理比较耗时或者对速度要求较高的服务,如文件传输服务(FTP)等。
五 实验步骤
步骤一:需求分析
这是一个简单的文本传输程序,客户端从标准输入(键盘)上输入文本后,发送到服务器,服务器将文本显示在标准输出(显示屏)上,反之同样操作。 使用 Socket 进行 Client/Server 程序设计的一般连接过程是这样的:Server 端监听某个端口是否有连接请求,Client 端向 Server 端发出连接请求,Server 端向 Client 端发回 Accept(接受)信息,一个连接就建立起来了。Server 端和 Client 端都可以通过 send()、write()等方法与对方通信。对于一个功能齐全
的 Socket,其工作过程包含以下四个基本步骤:
1、 创建 Socket;
2、 打开连接到 Socket 的输入输出流;
3、 按照一定协议对 Socket 进行读/写操作;
4、 关闭 Socket。
步骤二:服务器的开发
步骤三:客户端的开发
六 实验总结
通过开发一个简单的 C/S 通讯程序,加深了对 Socket 编程的理解,对服务器客户端编程方法的应用,有利于开发更复杂的 C/S 网络应用程序。
