Java套接字实现网络编程之基础篇

来源:互联网
更新时间:2016/6/17 0:27:15
责任编辑:鲁晓倩
字体:

   用java开发网络软件非常方便和强大,java的这种力量来源于他独有的一套强大的用于网络的 api,这些api是一系列的类和接口,均位于包java.net和javax.net中。在这篇文章中我们将介绍套接字(socket)慨念,同时以实例说明如何使用network api操纵套接字,在完成本文后,你将具备编写网络低端通讯软件的能力。

  什么是套接字(socket)?

  network api是典型的用于基于tcp/ip网络java程序与其他程序通讯,network api依靠socket进行通讯。socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入socket中,该socket将这段信息发送给另外一个socket中,使这段信息能传送到其他程序中。如图1

点击图片看大图中国学网 www.xue163.com

  我们来分析一下图1,host a上的程序a将一段信息写入socket中,socket的内容被host a的网络管理软件访问,并将这段信息通过host a的网络接口卡发送到host b,host b的网络接口卡接收到这段信息后,传送给host b的网络管理软件,网络管理软件将这段信息保存在host b的socket中,然后程序b才能在socket中阅读这段信息。

  假设在图1的网络中添加第三个主机host c,那么host a怎么知道信息被正确传送到host b而不是被传送到host c中了呢?基于tcp/ip网络中的每一个主机均被赋予了一个唯一的ip地址,ip地址是一个32位的无符号整数,由于没有转变成二进制,因此通常以小数点分隔,如:198.163.227.6,正如所见ip地址均由四个部分组成,每个部分的范围都是0-255,以表示8位地址。

  值得注意的是ip地址都是32位地址,这是ip协议版本4(简称ipv4)规定的,目前由于ipv4地址已近耗尽,所以ipv6地址正逐渐代替ipv4地址,ipv6地址则是128位无符号整数。

  假设第二个程序被加入图1的网络的host b中,那么由host a传来的信息如何能被正确的传给程序b而不是传给新加入的程序呢?这是因为每一个基于tcp/ip网络通讯的程序都被赋予了唯一的端口和端口号,端口是一个信息缓冲区,用于保留socket中的输入/输出信息,端口号是一个16位无符号整数,范围是0-65535,以区别主机上的每一个程序(端口号就像房屋中的房间号),低于256的短口号保留给标准应用程序,比如pop3的端口号就是110,每一个套接字都组合进了ip地址、端口、端口号,这样形成的整体就可以区别每一个套接字t,下面我们就来谈谈两种套接字:流套接字和自寻址数据套接字。

  流套接字(stream socket)

  无论何时,在两个网络应用程序之间发送和接收信息时都需要建立一个可靠的连接,流套接字依靠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套接字编程中扮演了一个重要角色。参数传递给流套接字类和自寻址套接字类构造器或非构造器方法。inetaddress描述了32位或64位ip地址,要完成这个功能,inetaddress类主要依靠两个支持类inet4address 和 inet6address,这三个类是继承关系,inetaddrress是父类,inet4address 和 inet6address是子类。资讯转帖于 Xue163.com_JAVA认证考试题库

www.xue163.com true http://www.xue163.com/kao/58/589154.html report 2970 Java套接字实现网络编程之基础篇,用java开发网络软件非常方便和强大,java的这种力量来源于他独有的一套强大的用于网络的api,这些api是一系列的类和接口,均位于包java.net和javax.net中。在这篇文章中我们将介绍套接字(socket)慨念,同时以实例说明如何使用n...
最近关注
首页推荐
热门图片
最新添加资讯
24小时热门资讯
java套接网络套接字编程java套tcp套接字网络编程java套接字编程java 实现h264编解码java套接字编程实例java实现文本编辑器java 原始套接字编程java实现哈夫曼编码
精彩资讯
精彩推荐
热点推荐
真视界
精彩图片
社区精粹
关于本站 | 广告服务 | 手机版 | 商务合作 | 免责申明 | 招聘信息 | 联系我们
Copyright © 2004-2016 Xue163.com All Rights Reserved. 中国学网 版权所有
京ICP备10044368号-1 京公网安备11010802011102号
荐闻 | 学网头条知识问答 | 装修 | 作业 | 荐闻 | 学网头条精彩微信 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 猎奇 | 精彩看点 | 图库 | 新闻中心 | 软件教室 | 设计大全 | 网络相关 | 英语学习 | 开发编程 | 考试中心 | 参考范文 | 管理文库 | 营销中心 | 站长之家 | IT信息中心 | 商学院 | 数码大全 | 硬件DIY | 企业服务 | 网吧在线 | 问吧 | 百科 | 硬件知识 | 本网视点 | 文库 | 手机 | 平板 | 汽车 | 游戏 | 家电 | 精彩摄影 | 时尚科技 | 现代家居 | IT女人 | 经验 | 每日新闻 | 健康养生 | 图书馆 | 精彩微信 | 猎奇 | 精彩看点 | 图库编程 方案 信息windows方案windows answer文档机构教育文档问答中心IT编程数码信息解决方案信息中心IT科技