`

浅谈Socket编程及Java实现

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

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

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



  那么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。

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

  代码一:

  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=='\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 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());

     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编程的实现方法,希望能对大家有所帮助。
  • 大小: 39.4 KB
分享到:
评论

相关推荐

    JAVA Socket编程实现文件上传

    以上就是使用Java Socket编程实现文件上传涉及到的主要知识点,包括Socket通信机制、文件I/O、数据库操作、异常处理、多线程、安全性和性能优化等方面。理解并掌握这些内容,对于开发高效、可靠的文件上传系统至关...

    Java Socket网络编程.pdf

    Java Socket网络编程是Java平台中的核心特性,它为开发者提供了在TCP/IP协议下创建网络应用的能力。Socket编程主要用于实现客户端和服务器之间的通信,基于客户机/服务器模型。在这个模型中,服务器端通常处于被动...

    Socket编程QQ实现 JAVA

    Socket编程在Java中是网络通信的基础,主要用于实现客户端与服务器之间的连接。QQ作为一个即时通讯软件,其背后的原理也离不开Socket通信。在这个项目中,我们将学习如何利用Java的Socket API来模拟实现一个简单的QQ...

    总结java_socket编程.doc

    Java Socket 编程总结 Java Socket 编程是Java语言中用于网络编程的主要技术之一。它允许开发者创建网络应用程序,通过Socket实现客户机/服务器结构的通信。在Java中,Socket编程主要是基于TCP/IP协议的网络编程。 ...

    Java socket编程实现两台主机间的通信

    Java Socket 编程实现两台主机间的通信 Java Socket 编程是 Java 语言中用于实现网络通信的编程技术。通过使用 Socket 编程,可以实现两台主机之间的通信,实现数据的传输和交换。本文将详细介绍 Java Socket 编程...

    Java多线程-Socket编程

    Java 多线程-Socket 编程是指在 Java 语言中使用多线程技术来实现网络编程,特别是使用 Socket 编程来实现客户端和服务器端的通信。在 Java 中,多线程可以使用 Thread 类和 Runnable 接口来实现,而 Socket 编程则...

    Java TCP IP Socket编程(原书第2版).

    《Java TCP/IP Socket编程(原书第2版)》基于TCP/IP Socket相关原理,对如何在Java中进行Socket编程作了深入浅出的介绍。《Java TCP/IP Socket编程(原书第2版)》内容简明扼要,条理清晰,并在讲解相应的概念或编程...

    java socket编程

    Java Socket编程是Java平台中用于实现网络通信的核心API,它基于TCP/IP协议栈,提供了低级别的、面向连接的、可靠的字节流通信。在本文中,我们将深入探讨Java Socket编程的关键概念、工作原理以及如何创建服务端和...

    socket编程的java实现

    这个是关于socket编程的 用java去实现。

    java socket 编程,Java socket 编程实例

    ### Java Socket编程详解及实例分析 #### 一、Socket编程基础概述 在计算机网络通信领域,Socket编程是一种广泛使用的通信方式。它为不同主机上的进程提供了双向通信的能力,是网络编程的基础之一。Java语言提供了...

    计算机网络实验SOCKET编程

    3. 实验要求:学生需要使用MFC SOCKET编程和JAVA SOCKET编程,实现一个简单的Socket编程应用程序。 4. 实验内容:包括Socket编程的基本概念、Socket编程的协议和标准、MFC SOCKET编程和JAVA SOCKET编程的使用等。 ...

    java的Socket编程

    Java的Socket编程是Java网络编程的核心部分,它提供了在TCP/IP协议栈上进行通信的机制。Socket接口是对TCP/IP协议的抽象,使得开发者能够轻松地创建客户端和服务器应用程序,实现网络上的数据交换。在这个主题中,...

    浅出Java Socket编程

    本教程将深入浅出地探讨Java Socket编程的核心概念和技术,帮助开发者理解如何构建可靠的网络应用程序。 一、Socket概述 Socket,通常被称为套接字,是网络通信中的一个抽象接口,它允许两个运行在不同设备上的应用...

    java socket编程实例(出自《java大学教程》)

    Java套接字(Socket)编程是Java网络编程的基础,它提供了客户端与服务器之间的通信机制。在《Java大学教程》中,通常会通过实例来详细解释和演示这些概念。本实例集中,我们关注的是三个关键的Socket编程示例,旨在...

    基于java socket网络编程实现的五子棋游戏,可多人在线玩耍,聊天

    本项目“基于Java Socket网络编程实现的五子棋游戏,可多人在线玩耍,聊天”正是这种技术的实际应用。 首先,我们来深入理解Java Socket编程。Socket是网络通信中的端点,它允许两台计算机(或者网络上的任何其他...

    Java源码:Socket编程.rar_java socket _java编程_socket java_socket编程 jav

    Java Socket编程是网络编程中的重要组成部分,主要用于实现客户端与服务器之间的通信。在Java中,Socket是基于TCP协议的,提供了一种可靠的、基于字节流的双向通信方式。本资料包含的"Java源码:Socket编程"是一个...

    Java版socket编程实现带语音聊天和文件传送功能

    本资源是本人前面发过的一个局域网聊天工具的升级版。...代码保证可用,如有问题请留言,代码较规范,结构清晰,相信对学习java socket编程和swing界面开发的朋友有一定的帮助。 注:main函数在MainFrame类

    用Socket编程实现电子邮件的发送

    ### 使用Socket编程实现电子邮件发送的关键知识点 #### 一、Socket编程基础 Socket编程是一种网络通信方式,它允许不同计算机上的程序进行数据交换。在互联网上,每个设备都有一个唯一的IP地址,而Socket则是通过...

    Java TCP IP Socket编程(原书第2版)

    《Java TCP/IP Socket编程》(原书第2版)是一本深入探讨Java中Socket编程的专著,旨在帮助读者理解并掌握如何在Java环境中利用TCP/IP协议进行网络通信。本书不仅详细介绍了Socket的工作原理,还提供了丰富的示例...

Global site tag (gtag.js) - Google Analytics