浅谈Socket编程及Java实现.doc_第1页
浅谈Socket编程及Java实现.doc_第2页
浅谈Socket编程及Java实现.doc_第3页
浅谈Socket编程及Java实现.doc_第4页
浅谈Socket编程及Java实现.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java是一种可用于进行网络编程的语言,它提供了两种功能强大的网络支持机制:URL访问网络资源的类和用Socket通讯的类,来满足不同的要求。一是URL用于访问Internet网上资源的应用;另一种是针对client/server(客户端/服务器)模式的应用以及实现某些特殊的协议的应用,它的通讯过程是基于TCP/IP协议中传输层接口socket实现的。本文想简单的介绍一下Socket编程的Java实现方法。客户基于服务器之间使用的大部分通讯组件都是基于socket接口来实现的。Socket是两个程序之间进行双向数据传输的网络通讯端点,有一个地址和一个端口号来标识。每个服务程序在提供服务时都要在一个端口进行,而想使用该服务的客户机也必须连接该端口。Socket因为是基于传输层,所以它是比较原始的通讯协议机制。通过Socket的数据表现形式为字节流信息,因此通讯双方要想完成某项具体的应用则必须按双方约定的方式进行数据的格式化和解释,我们可以看出使用Socket编程比较麻烦,但是它具有更强的灵活性和更广泛的使用领域。有些朋友会问,客户机/服务器工作的模式到底是什么样的呢?好,下面我想结合一张图来介绍一下它们的工作模式。那么Java应用程序是如何实现上述过程的呢?包中有两个类Socket和ServerSocket,分别用于在客户机和服务器上创建Socket通讯。让我们先来看看客户段程序编写的流程:1、 首先调用Socket类的构造函数,以服务器的指定的IP地址或指定的主机名和指定的端口号为参数,创建一个Socket流,在创建Socket流的过程中包含了向服务器请求建立通讯连接的过程实现。2、 建立了客户端通讯Socket后。就可以使用Socket的方法getInputStream()和getOutputStream()来创建输入/输出流。这样,使用Socket类后,网络输入输出也转化为使用流对象的过程。3、 使用输入输出流对象的相应方法读写字节流数据,因为流连接着通讯所用的Socket,Socket又是和服务器端建立连接的一个端点,因此数据将通过连接从服务器得到或发向服务器。这时我们就可以对字节流数据按客户端和服务器之间的协议进行处理,完成双方的通讯任务。4、 待通讯任务完毕后,我们用流对象的close()方法来关闭用于网络通讯的输入输出流,在用Socket对象的close()方法来关闭Socket。下面,我想通过一个简单的例子来进一步介绍一下客户端程序的编写代码一:import java.io.*;import .*;public class SocketCommunicationClientpublic static void main(String args)trySocket clientSocket =new Socket (mice,9000);/创建一个流Socket并与主机mice上的端口9000相连接OutputStream output =clientSocket.getOutputStream();/向此Socket写入字节的一个输出流DataInputStream input=new DataInputStream(clientSocket.getInputStream();file:/创建新的数据输入流以便从指定的输入流中读出数据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.err.println(Exception :+e);这个程序是一个非常的简单的数据通讯的例子,程序先创建了一个Socket并和主机mice上的端口9000相连接,然后打开输入输出流,接着程序从标准输入接收字符并写入流中,每写满一行(以用户键入回车为标志),就把缓冲区中的字符串送往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实现:代码二:import .*; import java.io.*; public class SocketCommunicationServer public static void main(String args) try boolean flag=true;/设置标志位为真 Socket client=null;/创建Socket client以接收来自客户端的请求 String inputLine; ServerSocket serverSocket =new ServerSocket (9000);/以端口9000创建一个服务器Socket System.out.println(服务器在端口9000上监听);file:/也可以使用serverSocket.getLocalPort()来获得端口号 while(flag) client=serverSocket.accept();file:/监听并接受与此Socket的连接,该方法会阻塞直到有一个连接产生 DataInputStream input=new DataInputStream(new BufferedInputStream(client.getInputStream(); PrintStream output=new PrintStream(new BufferedOutputStream(client.getOutputStream(); while ( inputLine= input.readLine()!=null) if(inputLine.equals(Stop) flag=false; break; output.println(inputLi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论