JAVA编程实现TCP网络通讯的方法示例

 更新时间:2017年08月02日 12:08:07   作者:迟做总比不做强  
这篇文章主要介绍了JAVA编程实现TCP网络通讯的方法,简单说明了TCP通讯的原理并结合具体实例形式分析了java实现TCP通讯的步骤与相关操作技巧,需要的朋友可以参考下

本文实例讲述了JAVA编程实现TCP网络通讯的方法。分享给大家供大家参考,具体如下:

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

由IETF的RFC 793定义,在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。

基于TCP网络通讯实现的类主要有服务器端的ServerSocket用客户端的Socket。

通讯流程:

打开服务器,等待客户端连接-->客户端连接上服务器-->数据通讯。

代码实现步骤:

1. 创建服务器端(ServerSocket)对象或客户端(Socket)对象。
2. 建立起服务器与客户端连接
3. 通过输入输出流进行文件(数据)通讯
4. 通讯结束 ,关闭资源 。

一个简单的小例子,服务端:

public class SocketServer {
  public static void main(String[] args) {
    try {
      // 创建一个服务器ServerSocket,并指定端口号为5120
      ServerSocket mServerSocket = new ServerSocket(5120);
      // 等待客户端连接
      Socket socket = mServerSocket.accept();
      // 连接上客户端后,获取客户端输入流信息
      InputStream is = socket.getInputStream();
      // 通过获取缓冲数据方式来读取文本信息
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      // 获取文本信息
      String line;
      StringBuffer sb = new StringBuffer();
      while ((line = br.readLine()) != null) {
        sb.append(line);
      }
      System.out.println(sb.toString());
      socket.shutdownInput();
      // 收到客户端信息后,回复客户端信息
      OutputStream os = socket.getOutputStream();
      PrintWriter pw = new PrintWriter(os);
      pw.write("收到回复,我是服务端");
      pw.flush();
      // 关闭流通常放在finally中操作
      os.close();
      br.close();
      is.close();
      pw.close();
      socket.close();
      mServerSocket.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

客户端:

public class ClientSocket {
  public static void main(String[] args) {
    try {
      // 创建客户端Socket,指定主机和端口
      Socket mSocket = new Socket("localhost", 5120);
      // 通过输入流向服务器发数据
      OutputStream os = mSocket.getOutputStream();
      PrintWriter pw = new PrintWriter(os);
      pw.write("来自客户端Socket的数据,你收到了吗?");
      pw.flush();
      mSocket.shutdownOutput();
      // 收取服务端的回复信息
      InputStream is = mSocket.getInputStream();
      // 通过获取缓冲数据方式来读取文本信息
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      // 获取文本信息
      String line;
      StringBuffer sb = new StringBuffer();
      while ((line = br.readLine()) != null) {
        sb.append(line);
      }
      System.out.println(sb.toString());
      // 关闭流通常放在finally中操作
      br.close();
      is.close();
      pw.close();
      os.close();
      mSocket.close();
    } catch (UnknownHostException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

运行时,要先启动服务端,然后启动客记户端,通常网络通讯会与多线程交织在一起。

更多关于java相关内容感兴趣的读者可查看本站专题:《Java Socket编程技巧总结》、《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Java实现一个顺序表的完整代码

    Java实现一个顺序表的完整代码

    顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般采用数组存储。在数组上完成数据的增删减改。顺序表的底层是一个数组
    2021-04-04
  • 详谈Java多线程的几个常用关键字

    详谈Java多线程的几个常用关键字

    下面小编就为大家带来一篇详谈Java多线程的几个常用关键字。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Springboot es包版本异常解决方案

    Springboot es包版本异常解决方案

    这篇文章主要介绍了springboot 项目依赖 es包版本异常,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Spring ComponentScan的扫描过程解析

    Spring ComponentScan的扫描过程解析

    这篇文章主要介绍了spring ComponentScan的扫描过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 关于Spring MVC在Controller层中注入request的坑详解

    关于Spring MVC在Controller层中注入request的坑详解

    这篇文章主要给大家介绍了关于Spring MVC在Controller层中注入request的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • 深入解析Java接口(interface)的使用

    深入解析Java接口(interface)的使用

    这篇文章主要介绍了深入解析Java接口(interface)的使用,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • IntelliJ IDEA 2020.2.3永久破解激活教程(亲测有效)

    IntelliJ IDEA 2020.2.3永久破解激活教程(亲测有效)

    intellij idea 2022是一款市面上最好的JAVA IDE编程工具,该工具支持git、svn、github等版本控制工具,整合了智能代码助手、代码自动提示等功能,本教程给大家分享IDEA 2022最新永久激活码,感兴趣的朋友参考下吧
    2020-10-10
  • MyBatis框架之mybatis逆向工程自动生成代码

    MyBatis框架之mybatis逆向工程自动生成代码

    Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件。本文主要给大家介绍mybatis逆向工程自动生成代码,感兴趣的朋友一起学习吧
    2016-04-04
  • JSON字符串转成java的Map对象详细步骤

    JSON字符串转成java的Map对象详细步骤

    这篇文章主要介绍了如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • mybatis-plus 新增/修改如何实现自动填充指定字段

    mybatis-plus 新增/修改如何实现自动填充指定字段

    这篇文章主要介绍了mybatis-plus 新增/修改实现自动填充指定字段方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论