初识通信
在网络世界里,最核心的是通信。互联网之所以为互联网,就是因为通过网络共享资源、发送消息,实现了将许多异构终端连接在一起的功能。在计算机网络的世界里,通信的关键是通过在有限区域内以共同的协议和标准屏蔽了硬件差异,实现了设备的互联互通。
通常我们自己写的通信程序一般都是运行在底层通信协议之上,我们通知定制自己的消息格式和类型,让它通过互联网传输,在接收端对自定义的消息格式进行解析。
通信一般都包括客户端和服务器端, 不管不管网络程序是采用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位为单位来进行信息处理。
对于字节流和字符流有一个很重要的区别:字节流可以处理任何信息。而字符流只能处理以字符为单位的信息,例如:文本信息,字符流不可以处理二进制信息,比如:音视频文件。常用的字节流类有:InputStream和OutputStream,它们是所有字节流的超类。常用的字符流类有Reader和Writer,它们是处理字符流的超类。当然为了提高读取效率,Java中还提供了各种各样的缓冲流类。特别提醒一点:在网络中我们有时候希望以类的形式来传输对象,这是我们就需要用到ObjectOutputStream 和ObjectInputStream,不过在用到这两个类的时候一般要对传输对象进行序列化,这时只需要实现java.io.Serializable 接口,而这个接口不需要我们实现任何方法。
2. 关于协议的理解
协议是什么?协议就是我们定义的传送和接收消息的格式。对于协议,我们一般做这样的处理:把协议分为头部(Head)和体部(Body),在头部我们一般需要定义消息的类型、消息体长度等信息。刚开始学Java通信的时候,我自己有一个疑惑:既然已经TCP/IP和其他互联网协议,为什么我们还需要自己定义协议呢?随着对通信流程的理解,,终于找到了答案。最简单的聊天程序可能不需要我们定义协议 ,我们只是将字符串来回发送,但随着传送消息类型的增多,我们就需要定义我们自己的消息格式,也就是协议。TCP/IP只是更为底层的协议,它保证我们发送的数据可靠地在互联网上传输,而这些数据就包括我们自己要发送的有用数据即消息体部和我们自己定义的消息头信息即头部。如果再深究的话,就是计算机网络方面的分层的协议上面,在这里就不做赘述。
分享到:
相关推荐
"java通信参考程序"是一个专为学习和理解Java通信机制而设计的实验项目。这个实验程序旨在帮助初学者和开发者了解如何在Java环境中实现不同节点之间的数据交换,这对于构建分布式系统、网络服务或客户端应用至关重要...
Java网络编程通信机制是开发分布式应用的核心技术,它允许程序通过网络进行数据交换,实现不同设备间的交互。在Java中,网络编程主要依赖于Java的Socket API和ServerSocket API,这两个API提供了基于TCP/IP协议的套...
这种通信机制使Flex能够利用Java的强大功能来处理复杂的业务逻辑和数据管理。 在Flex和Java之间进行通信时,通常会用到两种主要技术:AMF(Action Message Format)和SOAP(Simple Object Access Protocol)。AMF是...
在这个作业中,我们将深入理解Java中的Socket通信机制,并通过实际案例来实现两个文件的传输。 首先,我们要了解Java的网络编程基础。Java提供了丰富的类库支持网络编程,如`java.net`包下的Socket、ServerSocket、...
Java的安全机制是其独特优势之一,它通过一系列的内置安全特性确保了应用程序的稳定性和安全性。...通过对这些机制的理解和应用,可以有效提高Java应用程序的安全性和稳定性,保护用户的系统免受恶意攻击。
总的来说,Java实现串口通信需要对javax.comm包有深入理解,并能正确地管理串口的打开、关闭、读写以及错误处理。这个过程可能涉及多线程,因为读取串口数据通常是异步的,而用户界面的更新需要同步进行。在实际项目...
`ReentrantLock`和`CountDownLatch`是基于AQS的典型应用,通过它们我们可以深入理解Java并发编程的复杂性以及如何通过AQS来控制线程的同步和通信。通过深入学习这些机制,开发者可以更好地处理并发问题,提高程序的...
首先,我们来深入理解JAVA Socket。JAVA Socket是Java提供的网络编程接口,它基于TCP协议,确保了数据的可靠传输。在即时通信程序中,Socket用于建立客户端(Client)和服务器端(Server)之间的连接,使得两者能够...
在IT行业中,不同编程语言之间的通信是常见的需求,特别是在分布式系统和微服务架构中。...实现这种跨语言通信需要对不同语言的特性和通信机制有深入理解,同时进行充分的测试以确保系统的稳定性和可靠性。
Java NIO提供了一种替代传统I/O的机制,可以在单个线程中处理多个连接,提高了性能。`Selector`、`ServerSocketChannel`和`SocketChannel`是NIO的关键类。 8. **HTTP和HTTPS**: Java的`HttpURLConnection`和`...
Flex与Java通信是Web开发中的一个重要技术组合,它允许用户在浏览器端利用Flash的富互联网应用(RIA)特性,通过ActionScript与服务器端的Java应用程序进行数据交互。本压缩包包含了一个完整的Flex与Java通信的示例...
通过研究这个Java即时通信工具源码,开发者可以学习到如何构建网络应用、如何处理并发、如何设计分布式系统的通信机制,以及如何与数据库进行有效交互。这对于提升Java开发能力,尤其是网络编程和系统架构设计方面的...
压缩包中的"Chap17"可能指的是实训课程的第17章,这部分可能详细讲解了Java局域网通信的实现步骤,包含了相关代码示例和练习题,帮助学生深入理解和掌握网络编程技能。 总之,Java局域网通信软件的开发涵盖了网络...
8. **线程与并发**:Java提供了强大的线程支持,理解线程的创建、同步和通信,以及如何利用并发提升程序性能,是进阶Java开发的重要技能。 9. **异常与错误**:在编写程序时,必须考虑可能出现的异常情况。学习如何...
【Android与Linux底层通信机制实现】是Android系统开发中的核心环节,它涉及到Java层与JNI层的交互以及如何调用Linux底层驱动。Android应用程序主要由Java编写,运行在Dalvik虚拟机上,但为了实现与硬件设备的直接...
首先,让我们深入理解Java与PLC通信的基本概念。PLC是一种专门用于工业环境中的数字运算操作电子系统,用于控制机械或生产过程。Java,作为一种广泛使用的编程语言,因其跨平台性和强大的网络功能,常被用来构建与...
通过阅读《深入理解Java虚拟机》第三章,开发者不仅可以深入理解Java的安全机制,还能学习到如何在实际项目中实施这些安全策略,提升应用的安全性。对于想要从事Java开发或者对系统安全有深入了解需求的人来说,这一...
Flex Java通信实例主要探讨的是如何在Adobe Flex前端应用与Java后端服务器之间建立通信机制,以便实现数据交换和功能交互。Flex是一种开放源代码的框架,用于构建具有丰富用户界面的Web应用程序,而Java作为多平台...
### JAVA编写网络通信程序知识点...从输入/输出流的管理到Socket通信机制的理解,再到对Java语言特性的掌握,每一个知识点都至关重要。掌握了这些基础知识后,开发者就可以构建出高效、稳定且易于维护的网络通信程序。