首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

了解Java通信机制

2012-08-30 
理解Java通信机制?初识通信???? 在网络世界里,最核心的是通信。互联网之所以为互联网,就是因为通过网络共享

理解Java通信机制
?初识通信

???? 在网络世界里,最核心的是通信。互联网之所以为互联网,就是因为通过网络共享资源、发送消息,实现了将许多异构终端连接在一起的功能。在计算机网络的世界里,通信的关键是通过在有限区域内以共同的协议和标准屏蔽了硬件差异,实现了设备的互联互通。

通常我们自己写的通信程序一般都是运行在底层通信协议之上,我们通知定制自己的消息格式和类型,让它通过互联网传输,在接收端对自定义的消息格式进行解析。

通信一般都包括客户端和服务器端, 不管不管网络程序是采用C/S或B/S结构。在C/S结构中,客户端和服务器都要我们自己写;在B/S结构中,我们只需要写服务器,浏览器就是我们的客户端。这里只简单谈一下C/S结构。在这里解释一下:B/S就是指浏览器/服务器模型,C/S就是我们所说的客户机/服务器模型。

初识Java通信

??????? Java的通信机制最核心的东西集中在 java.net.*和java.io.*两个包中。其中java.net.*主要负责的是客户端和服务器的连接功能。在大多情况下,在进行网络通信的时候,我们常常需要进行文件、消息等的读取、存入和传输,这就需要用到java.io.*包下的流。

如果我们要实现客户端和服务器的通信,java.net.*包下有我们需要的两个类:ServerSocket和Socket。一般我们用ServerSocket来创建服务器对象,Socket对象在客户端和服务器都会存在。在通信的开始,ServerSocket创建了一个服务器对象,用来阻塞等待客户端的连接,如果客户端连接上了,就会返回一个Socket对象;同样,在客户端我们也需要创建一个Socket对象,用来连接服务器。如果客户端和服务器的连接已经建立,最后负责消息传送的对象就是Socket 对象。

?Java通信的实现

在服务器我们需要做这几件事情:

ServerSocket ?ss ?= ?new ServerSocket(端口号);?? //创建服务器对象

Socket ?s ?= ?ss.accept();???????????????????????????????????????????????? //阻塞等待

在服务器我们做了这件事之后,如果在服务器打开的时间段内有客户端接了进来,服务器就返回一个Socket对象,接着,服务器就可以通过操作返回来的这个Socket 对象来和客户端进行信息传递。

在客户端我们只需做这样一件事:

???????? Socket? s ?= ?new Socket(“服务器的IP地址”, 端口号);??????? ???????? //创建客户端对象

????? 如果相应服务器打开,客户端做了这件事,就和服务器之间建立一个通信管道,两者之间就可以互通信息了。

????? 由于客户端和服务器通信的管道是两者共同建立的,所以任何一方都可以断开该连接。

关键注意点1.???????? 关于IO的理解

?????在涉及网络编程方面,一般都会用到IO流。在Java中,通过服务器和客户端建立的通信管道以流的形式来读取和写入文件或者消息。在这里简单谈一下关于Java的流问题。

???? 我们知道,在计算机中,任何信息都是以字节的形式进行处理的。在Java中,存在两种形式的流:字节流和字符流。字节流,顾名思义,就是处理信息的时候是以一个字节为单位进行存储的,而一个字节是八位,因此,也可以说是按八位来处理信息的。字符流,就是处理信息的时候以字符为单位,在Java中,字符是两个字节,也就是以16位为单位来进行信息处理。

对于字节流和字符流有一个很重要的区别:字节流可以处理任何信息。而字符流只能处理以字符为单位的信息,例如:文本信息,字符流不可以处理二进制信息,比如:音视频文件。常用的字节流类有:InputStreamOutputStream,它们是所有字节流的超类。常用的字符流类有ReaderWriter,它们是处理字符流的超类。当然为了提高读取效率,Java中还提供了各种各样的缓冲流类。特别提醒一点:在网络中我们有时候希望以类的形式来传输对象,这是我们就需要用到ObjectOutputStreamObjectInputStream,不过在用到这两个类的时候一般要对传输对象进行序列化,这时只需要实现java.io.Serializable 接口,而这个接口不需要我们实现任何方法。

2.???????? 关于协议的理解

???? 协议是什么?协议就是我们定义的传送和接收消息的格式。对于协议,我们一般做这样的处理:把协议分为头部(Head)和体部(Body),在头部我们一般需要定义消息的类型、消息体长度等信息。刚开始学Java通信的时候,我自己有一个疑惑:既然已经TCP/IP和其他互联网协议,为什么我们还需要自己定义协议呢?随着对通信流程的理解,,终于找到了答案。最简单的聊天程序可能不需要我们定义协议 ,我们只是将字符串来回发送,但随着传送消息类型的增多,我们就需要定义我们自己的消息格式,也就是协议。TCP/IP只是更为底层的协议,它保证我们发送的数据可靠地在互联网上传输,而这些数据就包括我们自己要发送的有用数据即消息体部和我们自己定义的消息头信息即头部。如果再深究的话,就是计算机网络方面的分层的协议上面,在这里就不做赘述。

good

热点排行