网络通信概述
Java 是一种可用于进行网络编程的语言,它提供了两种功能强大的网络支持机制:URL 访问网络资源的类和用 Socket 通讯的类,来满足不同的要求。一是 URL 用于访问 Internet网上资源的应用;另一种是针对 client/server(客户端/服务器)模式的应用以及实现某些特殊的协议的应用,它的通讯过程是基于 TCP/IP 协议中传输层接口 socket 实现的。本文想简单的介绍一下 Socket 编程的 Java 实现方法。
TCP 通信概述
客户基于服务器之间使用的大部分通讯组件都是基于 socket 接口来实现的。Socket 是两个程序之间进行双向数据传输的网络通讯端点,有一个地址和一个端口号来标识。每个服务程序在提供服务时都要在一个端口进行,而想使用该服务的客户机也必须连接该端口。Socket 因为是基于传输层,所以它是比较原始的通讯协议机制。通过 Socket 的数据表现形式为字节流信息,因此通讯双方要想完成某项具体的应用则必须按双方约定的方式进行数据的格式化和解释,我们可以看出使用 Socket 编程比较麻烦,但是它具有更强的灵活性和更广泛的使用领域。
客户机/服务器工作的模式到底是什么样的呢?好,下面我想结合一张图来介绍一下它们的工作模式。
服务器端:
InputStream----输入流,是用来接收来自客户端的数据。
OutputStream-----输出流,是服务器向客户端发送的数据。
客户端:
InputStream----输入流,是用来接收来自服务端的数据。
OutputStream-----输出流,是客户端向服务器端发送的数据。
那么 Java 应用程序是如何实现上述过程的呢?java.net 包中有两个类 Socket 和ServerSocket,分别用于在客户机和服务器上创建 Socket 通讯。
客户端
让我们先来看看客户段程序编写的流程:
1、 首先调用 Socket 类的构造函数,以服务器的指定的 IP 地址或指定的主机名和指定的端口号为参数,创建一个 Socket 流,在创建 Socket 流的过程中包含了向服务器请求建立通讯连接的过程实现。
2、 建立了客户端通讯 Socket 后。就可以使用 Socket 的方法 getInputStream()和getOutputStream()来创建输入/输出流。这样,使用 Socket 类后,网络输入输出也转化为使用流对象的过程。
3、 使用输入输出流对象的相应方法读写字节流数据,因为流连接着通讯所用的Socket,Socket 又是和服务器端建立连接的一个端点,因此数据将通过连接从服务器得到或发向服务器。这时我们就可以对字节流数据按客户端和服务器之间的协议进行处理,完成双方的通讯任务。
4、 待通讯任务完毕后,我们用流对象的 close()方法来关闭用于网络通讯的输入输出流,在用 Socket 对象的 close()方法来关闭 Socket。下面,我想通过一个简单的例子来进一步介绍一下客户端程序的编写代码一:
package com.workit.nettest; import java.io.DataInputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; public class SocketClient { public static void main(String[] args) {try { Socket clientSocket = new Socket(InetAddress.getByName("127.0.0.1"), 5000);// 创建一个流Socket并与 主机mice上的端口5000相连接 OutputStream output = clientSocket.getOutputStream();// 向此 Socket写入字节的一个输出流 DataInputStream input = new DataInputStream(clientSocket.getInputStream()); // 创建新的数据输入流以便从指定的输入流中读出数据 int c; String response; while ((c = System.in.read()) != -1)// 从屏幕上接受输入的字符串, 并且分解成一个个字符 { output.write((byte) c); if (c == '\n')// 如果字符为回车,则输出字符串缓冲 { output.flush(); response = input.readLine(); System.out.println("Communication:" + response); } } output.close(); input.close(); clientSocket.close(); } catch (Exception e) { System.out.println("ffffffffff"); } }}
这个程序是一个非常的简单的数据通讯的例子,程序先创建了一个 Socket 并和主机 mice上的端口 5000 相连接,然后打开输入输出流,接着程序从标准输入接收字符并写入流中,每写满一行(以用户键入回车为标志),就把缓冲区中的字符串送往 mice 上的服务器端程序进行处理,等待服务器端的应答。input.readLine()方法调用将导致程序停滞直到收到应答信息,程序将一直重复这个过程,直到用户输入中止符。最后程序要关闭 socket 输入输出流,在关闭 socket 和服务器端的连接。
服务端:
如何使用Java编写客户端的Socket 接口程序,下面我也想简要的谈一谈服务器端的Socket接口程序的 Java 实现方法,其过程如下所述:
1、 首先调用 ServerSocket 类以某个端口号为参数,创建一个 ServerSocket 对象,
即是服务器端的服务程序在该指定端口监听的 Socket。
2、 服务器端程序使用 ServerSocket 对象的 accept()方法,接收来自客户机程序的连
接请求,此时服务器端将一直保持停滞状态,直到收到客户端发来的连接请求,此时该方法将返回一个新建的 Socket 类的实例,代表和客户机建立的通讯链路在服务程序内的通讯端点。如果采用 Java 的多线程编程方法,可以实现并发服务器,继续监听来自其他客户的连接请求。
3、 使用新建的 Socket 对象创建输入、输出流对象。
4、 使用流对象的方法完成和客户端的数据传输,按约定协议识别并处理来自客户端的请求数据,并把处理的结果返回给客户端。
5、 客户端工作完毕后,则服务器端程序关闭和客户端通讯的流和通讯的 Socket。
6、 在服务器程序运行结束之间,应当关闭用来监听的 Socket.
下面让我们来看一个服务器端的程序的 Java 实现:
代码二:
package com.workit.nettest; import java.io.PrintStream; import java.net.*; import java.io.*; public class SocketServer { /** * @param args */ public static void main(String[] args) throws Exception { boolean flag=true;//设置标志位为真 Socket client=null;//创建Socket client以接收来自客户端的请求 String inputLine; ServerSocket serverSocket =new ServerSocket (5000);//以端口 5000创建一个服务器Socket System.out.println("服务器在端口5000上监听"); //也可以使用serverSocket.getLocalPort()来获得端口号 while(flag) { client=serverSocket.accept(); //监听并接受与此Socket的连接,该方法会阻塞直到有一个连接产生 DataInputStream input=new DataInputStream(new BufferedInputStream(client.getInputStream())); PrintStream output=new PrintStream(newBufferedOutputStream(client.getOutputStream())); while (( inputLine= input.readLine())!=null) { System.out.println("111111111" + inputLine); if(inputLine.equals("quit")) { flag=false; break; } output.println(inputLine); output.flush(); } output.close(); input.close(); client.close(); } serverSocket.close(); } }
【下载地址】
百度网盘链接:https://pan.baidu.com/s/1puPIHTY4zJtVZit4JQI_-w
提取码:fh97
相关文章
使用-JFreeChart来创建基于web的图表
XStream使用文档
WebService发布过程及常见问题
webpack实战入门进阶调优分享
weblogic调优参数及监控指标
weblogic节点管理
weblogic管理控制台概述
weblogic-部署和启动
WebLogic-Server-性能及调优-调优-Java-虚拟机
Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。
FlashFXP绿色版网盘下载,附激活教程 1781
FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具
Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1564
firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ
navicat for mysql中文绿色版网盘下载 1623
Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq
火车头采集器(旗舰版)绿色版网盘下载 1707
火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA
Photoshop(CS-2015-2023)绿色中文版软件下载 1823
安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64