预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共24页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

JAVA套接字编程 用Java开发网络软件非常方便和强大,Java的这种力量来源于他独有的一套强大的用 于网络的API,这些API是一系列的类和接口,均位于包java.net和javax.net中。在 这篇文章中我们将介绍套接字(Socket)慨念,同时以实例说明如何使用NetworkAPI操 纵套接字,在完成本文后,你就可以编写网络低端通讯软件。 什么是套接字(Socket)? NetworkAPI是典型的用于基于TCP/IP网络Java程序与其他程序通讯,Network API依靠Socket进行通讯。Socket可以看成在两个程序进行通讯连接中的一个端点, 一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中, 使这段信息能传送到其他程序中。如图1 我们来分析一下图1,HostA上的程序A将一段信息写入Socket中,Socket的内 容被HostA的网络管理软件访问,并将这段信息通过HostA的网络接口卡发送到Host B,HostB的网络接口卡接收到这段信息后,传送给HostB的网络管理软件,网络管 理软件将这段信息保存在HostB的Socket中,然后程序B才能在Socket中阅读这段 信息。 假设在图1的网络中添加第三个主机HostC,那么HostA怎么知道信息被正确传 送到HostB而不是被传送到HostC中了呢?基于TCP/IP网络中的每一个主机均被赋 予了一个唯一的IP地址,IP地址是一个32位的无符号整数,由于没有转变成二进制, 因此通常以小数点分隔,如:198.163.227.6,正如所见IP地址均由四个部分组成,每 个部分的范围都是0-255,以表示8位地址。 值得注意的是IP地址都是32位地址,这是IP协议版本4(简称Ipv4)规定的, 目前由于IPv4地址已近耗尽,所以IPv6地址正逐渐代替Ipv4地址,Ipv6地址则是128 位无符号整数。 假设第二个程序被加入图1的网络的HostB中,那么由HostA传来的信息如何能 被正确的传给程序B而不是传给新加入的程序呢?这是因为每一个基于TCP/IP网络通 讯的程序都被赋予了唯一的端口和端口号,端口是一个信息缓冲区,用于保留Socket 中的输入/输出信息,端口号是一个16位无符号整数,范围是0-65535,以区别主机上 的每一个程序(端口号就像房屋中的房间号),低于256的短口号保留给标准应用程序, 比如pop3的端口号就是110,每一个套接字都组合进了IP地址、端口、端口号,这样 形成的整体就可以区别每一个套接字t,下面我们就来谈谈两种套接字:流套接字和自 寻址数据套接字。 流套接字(StreamSocket) 无论何时,在两个网络应用程序之间发送和接收信息时都需要建立一个可靠的连 接,流套接字依靠TCP协议来保证信息正确到达目的地,实际上,IP包有可能在网络 中丢失或者在传送过程中发生错误,任何一种情况发生,作为接受方的TCP将联系发 送方TCP重新发送这个IP包。这就是所谓的在两个流套接字之间建立可靠的连接。 流套接字在C/S程序中扮演一个必需的角色,客户机程序(需要访问某些服务的网 络应用程序)创建一个扮演服务器程序的主机的IP地址和服务器程序(为客户端应用 程序提供服务的网络应用程序)的端口号的流套接字对象。 客户端流套接字的初始化代码将IP地址和端口号传递给客户端主机的网络管理软 件,管理软件将IP地址和端口号通过NIC传递给服务器端主机;服务器端主机读到经 过NIC传递来的数据,然后查看服务器程序是否处于监听状态,这种监听依然是通过套 接字和端口来进行的;如果服务器程序处于监听状态,那么服务器端网络管理软件就向 客户机网络管理软件发出一个积极的响应信号,接收到响应信号后,客户端流套接字初 始化代码就给客户程序建立一个端口号,并将这个端口号传递给服务器程序的套接字 (服务器程序将使用这个端口号识别传来的信息是否是属于客户程序)同时完成流套接 字的初始化。 如果服务器程序没有处于监听状态,那么服务器端网络管理软件将给客户端传递一 个消极信号,收到这个消极信号后,客户程序的流套接字初始化代码将抛出一个异常对 象并且不建立通讯连接,也不创建流套接字对象。这种情形就像打电话一样,当有人的 时候通讯建立,否则电话将被挂起。 这部分的工作包括了相关联的三个类:InetAddress,Socket,和ServerSocket。 InetAddress对象描绘了32位或128位IP地址,Socket对象代表了客户程序流套接字, ServerSocket代表了服务程序流套接字,所有这三个类均位于包java.net中。 InetAddress类 InetAddress类在网络API