[color=blue][/color] 学习java网络通信已经有一段时间了,做了一些项目,诸如仿腾讯qq的pc机与pc之间的聊天程序、远程控制、网络画板等等一些小项目。对java中的Socket通信技术已经有了一定的理解。 ---
亲爱的
众所周知,在Internet 被广泛使用的今天, 网络编程就显得更加重要了, 网络应用是Java 语言取得成功的领域之一,Java 已经成为Internet 上最为流行的一种编程语言。Java 语言的网络功能非常强大, 其网络类库不仅使我们可以开发访问Internet 应用层程序,而且还可以实现网络底层的通信。在TCP/IP 网络中,不同的机器之间通信时,数据的传输是由传输层控制的, 这包括数据要发往的目标机器及应用程序 数据的质量控制等。TCP/ IP 网络中最常用的传输协议TCP 和UDP , 用户数据报就属于这一层。传输层通常以TCP 和UDP 协议来控制端点到端点的通信。用于通信的端点是由Socket来定义的, 而Socket 是由IP 地址和端口号组成。常用的Socket 类型有两种: 流式Socket 和数据报式Socket 。流式是一种面向连接的Socket , 针对于面向连接的TCP 服务应用; 数据报式Socket 是一种无连的Socket ,对应于无连接的UDP 服务应用。本文介绍一种将Java 中的Socket 的类ServerSocket类分别用于客户端和服务器端, 在任意两台机器间建立流式连接, 实现点到点的通信的Java 程序实现方法。
一: Socket 通信基于Java 的实现Scoket 是网络上运行的两个程序间双向通信的一端,它既可以接受请求, 也可以发送请求, 利用它可以较为方便地进行网络上的数据传递。在
Java 中,可以将Sockek 类和ServerSocket 类分别用于客户端和服务器,在任意两台机器间建立连接。Socket 类用在客户端, 用于通过构造一个Socket 类来建立与服务器的连接。ServerSocket 类用于服务器端,用于接收客户端传送的数据。Java语言实现Socket 通信, 一般需要按以下三个步骤进行。
(1)建立服务器类在两台机器之间建立连接, 其中必须要把一台机器作为服务器, 在服务器端用Java 中的服务器类ServerSocket ,并使用端口号作为参数来创建服务器对象。例如: ServerSocket server = new Server2Socket ( 3000) ;server 是服务器对象, 它使用3000 号端口, 当一个客户端程序建立一个Socket 连接且所连接端口号为3000 时, 服务器对象server 便响应这个连接。接下来用Server . accept ( ) 方法创建一个Socket对象,服务器端可以利用这个Socket 对象与客户端进行通信。接着定义输入流in 及输出流out 对象,并进行封装,随后,就可以使用输入流in . read2Line ( ) 方法得到客户端的输入,也可以使用输出流out . println ( ) 方法向客户端发送数据了。最后,在所有通信结束以后, 应关闭这两个数据流,关闭的顺序是先关闭输出流, 再关闭输入流。
(2)建立客户端代码与服务器端相比, 客户端要简单一些。客户端需用到服务器所在机器的IP 地址以及服务器的端口作为参数来创建一个Socket 对象, 得到这个对象后,就可以用该对象相应的方法实现数据的输入和输出了。例如:Socket socket= new Socket ( ”192 . 168 . 0 . 5”,3000) ;该程序代码建立了一个socket 对象,这个对象连接到IP 地址为192 . 168 . 0 . 5 的主机, 端口号为3000 的服务器对象。
同服务器端一样, 接着要建立输入流和输出流,分别对应服务器的输出和客户端的写入。
(3)建立用户界面用户界面可以根据自已的喜好及通信要求建立。下面就以两台机器为例,具体说明实现
Socket 通信的关键程序代码:
步骤a: 服务器端由SimpleServer 和SimpleServer2Worker 类组成, SimpleServer 是实现该通信主类,在该类中要完成Socket 对象的定义, 并建立一个循环来检测是否有客户机连接到服务器上, 如果有, 则创建一个线程为这个客户机服务。SimpleServerWorker 则是一个处理线程的类, 它实现线程的Runnable 接口, 主要由该线程完成信息及
数据处理的显示等功能。具体代码如下:
import java . io . 3 ;
import java . net . 3 ; / / 引入数据包/ /
public class SimpleServer/ / 定义类/ /
{private static / / 定义通信端口号为3000/ /
final int PORT-NUMBER = 3000 ;
public static void main ( String[ ] args)
{ ServerSocket server = null ; / / 定义对象,并初始化/ /
Socket theSocket = null ;
DataInputStream theReader = null ;
PrintStream theWriter = null ;
try { server = new ServerSocket ( PORT-NUMBER) ;
/ / 实例化对象/ /
SimpleServerWorker worker ; / / 定义类对象/ /
Thread thread ; / / 定义一个线程对象/ /
while ( true) / / 循环检测是否有客户机连接到服务器上/ /
{ theSocket = server . accept ( ) ;/ / 调server 对象的accept ( ) 方法对通信端口监测
worker = new SimpleServerWorker ( theSocket ) ;/ / 实例化worker 对象/ /
thread = new Thread (worker ) ; / / 线程实例化/ /
thread . start ( ) ; / / 启动线程/ /
} }catch ( Exception e ) { . . . } / / 异常处理/ /
} / / SimpleServer 类完成/ /
SimpleServerWorker 类的程序代码与Java 处理一般线程程序的编写方法相同,在这就不在敷述。
步骤b: 客户端由SimpleClient 类组成
public class SimpleClient / / 定义类/ /
{ . . .
public static void main ( String[ ] args)
{ . . . / / 在此定义对象并初始化/ /
try
{ / / 把服务器的IP 地址和通信端口号
theSocket = new Socket ( theAddress , PORT-NUMBER) ;作参数实例化Socket 对象/ /
theReader = new BufferedReader ( new InputStreamReader (theSocket . getInputStream( ) ) ) ; / / 定义并实例化一个输入流对象/ /
theWriter = new PrintWriter ( newOutputStreamWriter ( theSocket . getOutputStream( ) ) ) ; / / 定义并实例化一个输出流对象/ /
while ( true) / / 循环将数据发送给服器端/ /
{ . . theWriter . println (mesg) ;
theWriter . flush ( ); / / 清空输出流, 并将缓冲区中的数据强制送出/ / . . .
}
二:小结
Java 语言中的Socket 类的功能非常强大。虽然传统编程语言如VB 、C + + 等也可以实现Socket通信,但其实现方法的难度很大。一般编程人员都望而生畏。编程难度主要体现在通信机器之间如何实现的同步及多任务处理方面。Java 拥有自已的语言优势( 1) Java 语言对线程的内置和本地的支持,它支持多线程。这样在一台服器与多客户机进行通信就可以建立并启动多个线程来为客户机服务。而编程人员不需要考虑CPU 对线程之间的调度( 2) Java 提供管理数据流的类,用户在传送和接收数据时,只需定义一个相应对象,用对象相应方法接受和发送数据就可。很好的解决了传统编程中技术难点。虽然现在微软也推出了VB.
NET、VC + + . NET 等语言用以加强网络编程功能。用这些新软件实现Socket 通信编程方法与Ja2va 语言实现的方法大体相同。即使在这样状态下,Java 同样拥有自己最大的语言优势即平台工作。这样建立通信时不须考虑所要通信机器之间所安装的操作系统是否一致。
综上所述,不仅介绍了Java 中实现端口侦听、网络连接、数据发送、数据的接受的具体方法, 还运用了Java 实现网络功能时所必然要涉及到的如多线程技术和利用控制码控制程序运行状态等的实现方法。了解并掌握这些对我们编写功能更强、结构更复杂的网络应用程序非常有帮助。
分享到:
相关推荐
本话题主要探讨了两种常用编程语言——Java和C#之间如何利用Socket进行通信。Socket是网络编程的基本接口,允许应用程序通过网络发送和接收数据。以下是关于"Java和C#之间基于Socket的通信"的详细知识点: 1. **...
以上就是关于“Android中Java和C的Socket通信Demo”的详细说明,包括Java Socket和C Socket的基本使用,JNI接口的建立,文件描述符的传递以及Ashmem的使用。理解并掌握这些知识点,能够帮助开发者在Android平台上...
在本项目中,我们主要探讨的是一个基于Java编程语言实现的五子棋游戏,它具有网络通信功能,允许两位玩家通过Socket进行实时对战。这是一个典型的客户端-服务器(Client-Server)架构,其中,Java的Socket编程是核心...
在这个主题中,“Java网络编程socket通讯简单封装(使用多线程)”着重讨论了如何在Java中使用Socket进行基本的网络通信,并通过多线程提升并发处理能力。 首先,Socket在Java中的实现主要依赖于`java.net.Socket`和`...
在Java中,`java.net.Socket` 和 `ServerSocket` 类是进行TCP通信的核心。服务器端通过`ServerSocket`监听特定端口,等待客户端连接。一旦连接建立,服务器就可以通过`Socket`对象向客户端发送数据,同时接收客户端...
Socket在Java中是网络通信的基础,它提供了一种低级别的、面向连接的、双向的通信机制,使得应用程序能够通过TCP/IP协议发送和接收数据。下面我们将深入探讨相关的Java网络编程知识点。 1. **Java Socket API**: ...
Java Socket 多线程是网络编程中的一个重要概念,它结合了Java的并发处理能力和Socket通信技术,使得服务器能够同时处理多个客户端的连接请求。在Java中,Socket是用于在网络环境中进行双向通信的类,而多线程则允许...
Java的Socket实现的多人聊天程序是一个基于网络通信的项目,主要利用了Java的Socket类来构建客户端和服务端的通信桥梁。Socket是TCP/IP协议的一部分,它提供了两台计算机之间进行数据传输的基础。在这个项目中,...
Java中的Socket线程池是一种高效的网络编程模型,它结合了Socket通信和多线程技术,以提高服务端处理客户端请求的并发性能。对于初学者来说,理解并掌握这个概念至关重要,因为这能帮助他们构建更稳定、可扩展的网络...
在这个"socket通讯java语言聊天室(仿qq风格)"项目中,我们将深入理解如何利用Java的Socket API创建一个类似QQ的聊天系统。 首先,Java Socket是基于TCP协议的,它提供了双向通信通道,允许两个程序通过网络进行...
在IT行业中,Java是一种广泛应用的编程语言,尤其在构建分布式系统和网络通信方面。本项目聚焦于使用Java的Socket进行多线程并发控制,并结合Hibernate ORM框架与MySQL数据库进行数据存储。下面将详细阐述这些技术...
对于网络编程,Java提供了丰富的API,如Socket和ServerSocket,这些在网络通信应用中非常常见。书中会教授如何使用这些API创建客户端和服务器端的应用程序。 Java的IO和NIO(非阻塞I/O)系统也是学习的重点。NIO...
Java Socket聊天室是一种基于Java网络编程技术实现的通信系统,主要使用了Socket接口来构建客户端与服务器端的连接。在这个项目中,用户通过控制台(console)进行交互,体验类似于简单的在线聊天室。以下是对这个Java...
1. **多线程**:Java语言支持多线程编程,源代码中可能包含了如何创建线程、同步机制(如synchronized关键字和Lock接口)、线程通信(wait()、notify()、notifyAll()方法)以及线程池的使用示例。 2. **网络编程**...
Java语言是世界上最流行的编程语言之一,其广泛应用在各种软件开发领域。这个“Java语言十大经典案例”涵盖了Java的核心特性,包括文件与流、多线程、网络编程以及异常处理等重要概念。以下是对这些知识点的详细说明...
7. **网络编程**:Java的Socket编程允许开发者创建网络应用程序,书中会介绍TCP和UDP协议的使用,以及ServerSocket和Socket类的用法。 8. **Java Swing和JavaFX**:这部分内容主要讲解如何使用Java的GUI库构建图形...
多线程技术是Java高级程序语言解决并发处理问题的核心方案,在网络通信系统设计和开发中扮演着关键角色。本文将深入探讨多线程技术在网络通信系统中应用的基本原理、实现机制以及安全性与同步控制的策略。 首先,要...
网络编程涉及Socket编程,使Java应用能够进行TCP/IP通信。数据库连接则会介绍JDBC,用于与各种数据库进行交互。 第29章可能涉及泛型,这是Java 5引入的特性,增强了类型安全,减少了类型转换的繁琐。理解泛型类、...