没有合适的资源?快使用搜索试试~ 我知道了~
利用Java套接字实现网络编程之基础篇.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 51 浏览量
2022-06-11
11:22:28
上传
评论
收藏 97KB DOC 举报
温馨提示
试读
15页
利用Java套接字实现网络编程之基础篇
资源推荐
资源详情
资源评论
利用 Java 套接字实现网络编程之基础
篇
作者: 编译出处:天极网责任编辑:方舟
用 开发网络软件非常方便和强大, 的这种力量来源于他独有的
一套强大的用于网络的 ,这些 是一系列的类和接口,均位于包
和 中。在这篇文章中我们将介绍套接字慨念,同
时以实例说明如何使用 ! 操纵套接字,在完成本文后,你将具备编
写网络低端通讯软件的能力。
什么是套接字(Socket)?
Network API 是典型的用于基于 TCP/IP 网络 Java 程序与其他程序通讯,Network API
依靠 Socket 进行通讯。Socket 可以看成在两个程序进行通讯连接中的一个端点,一个程序
将一段信息写入 Socket 中,该 Socket 将这段信息发送给另外一个 Socket 中,使这段信息能
传送到其他程序中。如图 1
我们来分析一下图 ," 上的程序 将一段信息写入 中,
的内容被 " 的网络管理软件访问,并将这段信息通过 " 的
网络接口卡发送到 "#,"# 的网络接口卡接收到这段信息后,传送给
"# 的网络管理软件,网络管理软件将这段信息保存在 "# 的
中,然后程序 # 才能在 中阅读这段信息。
假设在图 的网络中添加第三个主机 "$,那么 " 怎么知道信息
被正确传送到 "# 而不是被传送到 "$ 中了呢?基于 %$& 网络中的
每一个主机均被赋予了一个唯一的 地址, 地址是一个 ' 位的无符号整数,
由于没有转变成二进制,因此通常以小数点分隔,如:()',正如
所见 地址均由四个部分组成,每个部分的范围都是 ,以表示 ) 位地址。
值得注意的是 地址都是 ' 位地址,这是 协议版本 *(简称 +*)规
定的,目前由于 * 地址已近耗尽,所以 地址正逐渐代替 +* 地址,
+ 地址则是 ) 位无符号整数。
假设第二个程序被加入图 的网络的 "# 中,那么由 " 传来的信
息如何能被正确的传给程序 # 而不是传给新加入的程序呢?这是因为每一个基
于 %$& 网络通讯的程序都被赋予了唯一的端口和端口号,端口是一个信息缓
冲区,用于保留 中的输入&输出信息,端口号是一个 位无符号整数,
范围是 ',以区别主机上的每一个程序(端口号就像房屋中的房间号),
低于 的短口号保留给标准应用程序,比如 ++' 的端口号就是 ,每一
个套接字都组合进了 地址、端口、端口号,这样形成的整体就可以区别每一
个套接字 ,下面我们就来谈谈两种套接字:流套接字和自寻址数据套接字。
流套接字(Stream Socket)
无论何时,在两个网络应用程序之间发送和接收信息时都需要建立一个可
靠的连接,流套接字依靠 %$ 协议来保证信息正确到达目的地,实际上, 包
有可能在网络中丢失或者在传送过程中发生错误,任何一种情况发生,作为接
受方的 %$ 将联系发送方 %$ 重新发送这个 包。这就是所谓的在两个流套
接字之间建立可靠的连接。
流套接字在 $& 程序中扮演一个必需的角色,客户机程序(需要访问某些
服务的网络应用程序)创建一个扮演服务器程序的主机的 地址和服务器程序
(为客户端应用程序提供服务的网络应用程序)的端口号的流套接字对象。
客户端流套接字的初始化代码将 地址和端口号传递给客户端主机的网络
管理软件,管理软件将 地址和端口号通过 $ 传递给服务器端主机;服务器
端主机读到经过 $ 传递来的数据,然后查看服务器程序是否处于监听状态,
这种监听依然是通过套接字和端口来进行的;如果服务器程序处于监听状态,
那么服务器端网络管理软件就向客户机网络管理软件发出一个积极的响应信号,
接收到响应信号后,客户端流套接字初始化代码就给客户程序建立一个端口号,
并将这个端口号传递给服务器程序的套接字(服务器程序将使用这个端口号识
别传来的信息是否是属于客户程序)同时完成流套接字的初始化。
如果服务器程序没有处于监听状态,那么服务器端网络管理软件将给客户
端传递一个消极信号,收到这个消极信号后,客户程序的流套接字初始化代码
将抛出一个异常对象并且不建立通讯连接,也不创建流套接字对象。这种情形
就像打电话一样,当有人的时候通讯建立,否则电话将被挂起。
这部分的工作包括了相关联的三个类:,,--和
。 ,, 对象描绘了 ' 位或 ) 位 地址,
对象代表了客户程序流套接字, 代表了服务程序流套接字,所
有这三个类均位于包 中。
InetAddress 类
InetAddress 类在网络 API 套接字编程中扮演了一个重要角色。参数传递给流套接字类
和自寻址套接字类构造器或非构造器方法。InetAddress 描述了 32 位或 64 位 IP 地址,要完
成这个功能,InetAddress 类主要依靠两个支持类 Inet4Address 和 Inet6Address,这三个类是
继承关系,InetAddrress 是父类,Inet4Address 和 Inet6Address 是子类。
由于 InetAddress 类只有一个构造函数,而且不能传递参数,所以不能直接创建
InetAddress 对象,比如下面的做法就是错误的:
,,./!,,0
但我们可以通过下面的 5 个工厂方法创建来创建一个 InetAddress 对象或 InetAddress 数
组:
. getAllByName(String host)方法返回一个 InetAddress 对象的引用,每个对象包含一
个表示相应主机名的单独的 IP 地址,这个 IP 地址是通过 host 参数传递的,对于指定的主
机如果没有 IP 地址存在那么这个方法将抛出一个 UnknownHostException 异常对象。
. getByAddress(byte [] addr)方法返回一个 InetAddress 对象的引用,这个对象包含了
一个 Ipv4 地址或 Ipv6 地址,Ipv4 地址是一个 4 字节数组,Ipv6 地址是一个 16 字节地址数
组,如果返回的数组既不是 4 字节的也不是 16 字节的,那么方法将会抛出一个
UnknownHostException 异常对象。
. getByAddress(String host, byte [] addr)方法返回一个 InetAddress 对象的引用,这个
InetAddress 对象包含了一个由 host 和 4 字节的 addr 数组指定的 IP 地址,或者是 host 和 16
字节的 addr 数组指定的 IP 地址,如果这个数组既不是 4 字节的也不是 16 位字节的,那么
该方法将抛出一个 UnknownHostException 异常对象。
. getByName(String host)方法返回一个 InetAddress 对象,该对象包含了一个与 host
参数指定的主机相对应的 IP 地址,对于指定的主机如果没有 IP 地址存在,那么方法将抛
出一个 UnknownHostException 异常对象。
. getLocalHost()方法返回一个 InetAddress 对象,这个对象包含了本地机的 IP 地址,
考虑到本地主机既是客户程序主机又是服务器程序主机,为避免混乱,我们将客户程序主
机称为客户主机,将服务器程序主机称为服务器主机。
上面讲到的方法均提到返回一个或多个 InetAddress 对象的引用,实际上每一个方法都
要返回一个或多个 Inet4Address/Inet6Address 对象的引用,调用者不需要知道引用的子类型,
剩余14页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功