`
yangzhizhen
  • 浏览: 74905 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

理解Java通信机制

    博客分类:
  • Java
阅读更多

 初识通信

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

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

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

初识Java通信

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

如果我们要实现客户端和服务器的通信,java.net.*包下有我们需要的两个类:ServerSocketSocket。一般我们用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中还提供了各种各样的缓冲流类。特别提醒一点:在网络中我们有时候希望以类的形式来传输对象,这是我们就需要用到ObjectOutputStream ObjectInputStream,不过在用到这两个类的时候一般要对传输对象进行序列化,这时只需要实现java.io.Serializable 接口,而这个接口不需要我们实现任何方法。

2.         关于协议的理解

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

分享到:
评论
2 楼 LADigni 2012-04-02  
1 楼 javafound 2012-01-17  
good

相关推荐

    java多线程通信图解

    一张图方便理解和掌握java 多线程之间通信的实质 java 多线程 其实就是每个线程都拥有自己的内存空间,多线程之间的通信,比例A线程修改了主内存(main方法的线程)变量,需要把A线程修改的结果同步到主线程中,...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    android同linux底层通信机制实现

    学习android系统开发,必须了解android同底层的linux之间的通信机制,包括如何从java层调用到JNI层,如何打开linux底层驱动,及java实现方法.文档通过一个我们都非常熟悉的例子helloworld,容易理解

    深入理解Java内存模型

    在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制...在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。

    Java安全知识点详解:加密、认证、防护和漏洞扫描

    通过详细解析和说明,读者将获得全面的Java安全知识,了解加密算法、认证协议、防护机制和漏洞扫描工具的原理和应用。涵盖了加密和解密、安全认证和授权、安全通信和防护、安全漏洞和漏洞扫描、密码学、安全日志和...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包4

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包2

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java应用与开发 Java实验,综合应用 运用Java语言的各方面知识解决实际问题,提高综合编程能力

    用途: 理解Java中的多线程编程和数据库操作,提高程序的并发性和数据存储能力。 实验六: 关键词: 网络Socket编程(选择) 内容关键词: 网络Socket编程,Java实验 用途: 学习Java中的网络编程,了解Socket通信原理和...

    Java毕业设计-JAVA网络通信系统的研究与开发(源代码+论文+开题报告).rar

    **JAVA网络通信系统的研究与开发** 本项目是一个基于Java语言开发的综合性网络通信系统,旨在深入研究并实现高效、稳定的网络通信功能。通过采用Java的Socket编程和多线程技术,系统能够实现客户端与服务器之间的...

    java开源包4

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包101

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包11

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包6

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包9

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包5

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包8

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包10

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

Global site tag (gtag.js) - Google Analytics