WEB开发网
开发学院软件开发Java 使用 Java Socket 编程实现开放平台与 IBM 主机的... 阅读

使用 Java Socket 编程实现开放平台与 IBM 主机的文件传输

 2012-03-16 15:30:03 来源:WEB开发网   
核心提示:引言在网络世界中,网络中的节点间的信息的传递无疑是一个重要的环节,使用 Java Socket 编程实现开放平台与 IBM 主机的文件传输,在 IBM 大型主机进入这个网络世界后,网络节点中的新成员又多了一种,该项目是对一个具有 40 多年历史的 IBM 主机层次型数据库产品 - IMS 的一个通信组件 IMS Con

引言

  1. 在网络世界中,网络中的节点间的信息的传递无疑是一个重要的环节。在 IBM 大型主机进入这个网络世界后,网络节点中的新成员又多了一种。要实现开放平台与 IBM 大型主机之间的数据通信其实并非难事,对于程序员而言,掌握一种实现模型和实现的接口就会使网络编程变得简单,易于实现。Java 的 JDK 就提供可一系列的 API 来完成网络编程。Socket 就是其中的一种。
  2. 本文的研究背景源于主机环境的 IMS 产品的 IMS Connect 组件的自动化测试的需求。该产品运行于主机环境,但是对于需要在开放平台进行自动化测试的工程师来说,数据的通信无疑是一个需要解决的问题。
  3. 本文首先会给出一些基本的概念,包括 Socket 编程、FTP 传输协议的基本概念及原理以及 Java 实现 Socket 编程的特点。然后将阐述 IMS Connect 项目面临的问题,即本文实现的背景环境。接着将给出这个背景下的解决方法和实现细节。然后以项目为背景应用及验证。最后本文会将该实现方法推广为通用的解决方法。

示例必备条件

示例需要的环境:

  • 需要在 Windows 上安装的软件:
    • Rational Functional Tester V7.0
  • 需要在 IBM z/OS 上安装的环境:
    • IMS Version 9 (或者更新的版本)
    • IMS Connect Version 9 (或者更新的版本)
    • OTMA
    • TCP/IP

概念介绍

Socket

在网络出现之前的单机系统时代,更多的是进程之间的通信。由于每个进程有自己的地址空间,为了保证两个进程的通信互不干扰又协调工作,操作系统提供了相应的设施。如 UNIX 系统中的管道(pipe)、命名管道(named pipe)和软中断信号(signal)。而在网络中,两个不同计算机中的进程需要通信首先要解决的是进程识别的问题。同一主机上,不同进程可以用进程号(process ID)作为唯一标识,但是在网络的环境里不同的主机上完全可以用同一进程号,所以这种方法来区别进程是不可行的。另外 , 操作系统支持的网络协议很多,不同的协议的工作方式是不一样的,包括网络的地址格式也不同。因此,还需要考虑不同网络协议的识别问题。

这个问题催生了 Socket。Socket 又称为“套接字”,用于描述网络地址与端口,它是一个通信的接口。它是应用层与 TCP/IP 协议族通信的中间的软件抽象层,它位于运输层和网际层之上,又位于应用层之下,作为一个抽象层存在。在设计模式中,可以把 Socket 的设计想象成“门面模式”。它把负责的 TCP/IP 协议族隐藏在 Socket 接口的后面,对用户而言,之需要找到 Socket,然后后面的事就让 Socket 的去组织。图 1 描述了 Socket 的作用和所处的位置。

图 1. Socket 抽象层的位置  

FTP 传输协议

FTP(File Transfer Protocol) 远程文件传输协议是众多应用层协议的一种。它工作在 OSI 模型的第七层,TCP 模型的第四层,即应用层。它是为了简化 IP 网络上系统之间文件传送的协议,所以与两台计算机所处的位置,连接的方式甚至是否使用同样的操作系统是无关的。这也正符合本文研究的开放平台与 IBM 主机环境传输文件的问题背景。

相比于 HTTP(HyperText Transfer Protocol,超文本传输协议),FTP 协议工作需要两个端口(HTTP 需要一个端口 80),一个端口是作为控制连接端口,也就是 21 端口,用于发送指令给服务器以及等待服务器响应;另一端口是 20(仅限于 PORT 模式),用于数据的传输,主要作用是从客户向服务器发送文件的。

下面给出了 Passive 模式和 Port 模式的示例图 :

图 2. Port 模式 端口示意图 图 3. Passive 模式 端口示意图  

Java Socket 编程

要想用 Java 来实现 Socket 这种客户机到服务器的模型,其实并非难事。Java 的 JDK 中有很多 API 帮助程序员来实现这个模型,这些 API 封装在 java.net 这个包里。正是由于这些 API 的存在,使用 Java 来创建您所在位置的 Server 十分简单。

 

 ServerSocket server=new ServerSocket(1234); 

这样您就创建了一个 Server 的实例,另外要注意,端口从 0 到 65535 之间,但是前 1024 端口已经被 TCP/IP 作为保留端口,所以只能选择 1024 之后的端口。这段 code 就建立了以

1234 为端口的 Server。

Server 建立好了,现在需要的是一个 Client 来连接至刚才建立好的 Server。

Socket client = new Socket(InetAddress.getLocalHost(),1234);由于这个 Client 和 Server 处在同一台机器,所以使用 InetAddress.getLocalHost() 来获得本机的 IP 地址,如果您的 Server 是一个远程的机器,则可以使用它的 IP。例如:Socket client = new Socket( www.test.com, 4321); 此处的域名就是您需要连接的 Server 的 hostname。

建立连接之后,数据的传输还依赖于 Java 的 IO 相关的包,所以还必须引入 java.io 包。Java 的操作也并不复杂,它提供了字节流和 Unicode 的读写,也提供了一些缓冲用于数据的读写。代码 1 给出一个 Client 端的 Socket 编程示例:

清单 1. Client 端的 Socket 编程示例  

				 
 public class Client 
 { 
 Socket socket; 
 BufferedReader in; 
 PrintWriter out; 

 public Client() 
 { 
 try 
 { 
 socket = new Socket("xxx.xxx.xxx.xxx", 1234); 
 in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
 out = new PrintWriter(socket.getOutputStream(),true); 
 BufferedReader line = new BufferedReader(new InputStreamReader(System.in)); 
 out.println(line.readLine()); 
 line.close(); 
 out.close(); 
 in.close(); 
 socket.close(); 
 } 
 catch (IOException e) 
 {  } 
 } 
……
 } 

项目面临的问题

本文的研究背景是一个正在实施的项目,所以具有一定的现实意义。该项目是对一个具有 40 多年历史的 IBM 主机层次型数据库产品 - IMS 的一个通信组件 IMS Connect 进行自动化测试。本节将首先简要介绍 IMS 及 IMS Connect 的环境及架构,然后描述自动化测试面临的问题。

1 2 3 4  下一页

Tags:使用 Java Socket

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接