RSS
热门关键字:
当前位置 : 主页>编程开发>java编程>入门>列表

浅谈Socket编程及Java实现

来源:我要研发网 作者: 时间:1970-01-01 点击:



  Java是一种可用于进行网络编程语言,它提供了两种功能强大网络支持机制:URL访问网络资源类和用Socket通讯类,来满足不同要求。一是URL用于访问Internet网上资源应用;另一种是针对client/server(客户端/服务器)模式应用以及实现某些特殊协议应用,它通讯过程是基于TCP/IP协议中传输层接口socket实现。本文想简单介绍一下Socket编程Java实现方法。

字串5

  客户基于服务器之间使用大部分通讯组件都是基于socket接口来实现。Socket是两个程序之间进行双向数据传输网络通讯端点,有一个地址和一个端口号来标识。每个服务程序在提供服务时都要在一个端口进行,而想使用该服务客户机也必须连接该端口。Socket因为是基于传输层,所以它是比较原始通讯协议机制。通过Socket数据表现形式为字节流信息,因此通讯双方要想完成某项具体应用则必须按双方约定方式进行数据格式化和解释,我们可以看出使用Socket编程比较麻烦,但是它具有更强灵活性和更广泛使用领域。

字串5

  有些朋友会问,客户机/服务器工作模式到底是什么样呢?,下面我想结合一张图来介绍一下它们工作模式。

字串8

   字串3

  那么Java应用程序是如何实现上述过程呢?java.net包中有两个类Socket和ServerSocket,分别用于在客户机和服务器上创建Socket通讯。

字串4

  让我们先来看看客户段程序编写流程: 字串4

  1、 首先调用Socket类构造函数,以服务器指定IP地址或指定主机名和指定端口号为参数,创建一个Socket流,在创建Socket流过程中包含了向服务器请求建立通讯连接过程实现。 字串1

  2、 建立了客户端通讯Socket后。就可以使用Socket方法getInputStream()和getOutputStream()来创建输入/输出流。这样,使用Socket类后,网络输入输出也转化为使用流对象过程。

字串7

  3、 使用输入输出流对象相应方法读写字节流数据,因为流连接着通讯所用Socket,Socket又是和服务器端建立连接一个端点,因此数据将通过连接从服务器得到或发向服务器。这时我们就可以对字节流数据按客户端和服务器之间协议进行处理,完成双方通讯任务。 字串9


字串3

  4、 待通讯任务完毕后,我们用流对象close()方法来关闭用于网络通讯输入输出流,在用Socket对象close()方法来关闭Socket。 字串3

  下面,我想通过一个简单例子来进一步介绍一下客户端程序编写

字串6

  代码一: 字串2

  import java.io.*;
   import java.net.*;
   public class SocketCommunicationClient
   {
    public static void main(String[] args)
    {
    try{
    Socket 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==' ')//如果字符为回车,则输出字符串缓冲
     {

字串1


      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和服务器端连接。

字串6

  上面我们看了如何使用Java编写客户端Socket接口程序,下面我也想简要谈一谈服务器端Socket接口程序Java实现方法,其过程如下所述: 字串9


字串7

  1、 首先调用ServerSocket类以某个端口号为参数,创建一个ServerSocket对象,即是服务器端服务程序在该指定端口监听Socket。 字串6

  2、 服务器端程序使用ServerSocket对象accept()方法,接收来自客户机程序连接请求,此时服务器端将一直保持停滞状态,直到收到客户端发来连接请求,此时该方法将返回一个新建Socket类实例,代表和客户机建立通讯链路在服务程序内通讯端点。如果采用Java多线程编程方法,可以实现并发服务器,继续监听来自其他客户连接请求。

字串9

  3、 使用新建Socket对象创建输入、输出流对象。 字串2

  4、 使用流对象方法完成和客户端数据传输,按约定协议识别并处理来自客户端请求数据,并把处理结果返回给客户端。

字串5

  5、 客户端工作完毕后,则服务器端程序关闭和客户端通讯流和通讯Socket。

字串6

  6、 在服务器程序运行结束之间,应当关闭用来监听Socket.

字串7

  下面让我们来看一个服务器端程序Java实现:

字串8

  代码二:

字串6

  import java.net.*;
   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());

字串8


      while (( inputLine= input.readLine())!=null)
       {
        if(inputLine.equals("Stop"))
        {
         flag=false;
         break;
        }
        output.println(inputLine);
        output.flush();
       }
       output.close();
       input.close();
       client.close();
      }
      serverSocket.close();
      }catch(IOException e){}
     }
    }
   }

  以上,我简略谈了一下Socket编程机制以及使用Java进行Socket编程实现方法,希望能对大家有所帮助。

字串4

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
相关文章