Java实现TCP互发消息

 更新时间:2020年07月28日 15:18:46   作者:~故事的小黄花~  
这篇文章主要为大家详细介绍了Java实现TCP互发消息,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现TCP互发消息的具体代码,供大家参考,具体内容如下

TCP客户端:

package tcp;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class TcpClient {
  public static void main(String[] args) {
    Socket socket =null;
    OutputStream os =null;
    try {
      //创建socket对象,指明服务器端的ip和端口号
      InetAddress inet = InetAddress.getByName("127.0.0.1");
      socket = new Socket(inet, 8888);
      //获取一个输出流,用于输出数据
      os = socket.getOutputStream();
      //写出数据的操作
      os.write("你好,我是客户端".getBytes());
    }catch(IOException e){
      e.printStackTrace();
    }finally {
      //资源的关闭
      if(os!=null){
        try{
          os.close();
        }catch (IOException e){
          e.printStackTrace();
        }
      }
      if(socket!=null){
        try {
          socket.close();
        }catch (IOException e){
          e.printStackTrace();
        }
      }
    }
  }
}

TCP服务端:

package tcp;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

class TcpServer{
  public static void main(String[] args) {
    ServerSocket ss=null;
    Socket socket=null;
    InputStream is=null;
    ByteArrayOutputStream baos =null;
    try {
      //创建服务器端的ServerSocket,指明自己的端口
      ss = new ServerSocket(8888);
      //调用accept()表示接收来自于客户端的socket
      socket = ss.accept();
      //获取输入流中的数据
      is = socket.getInputStream();
      /*读取输入流中的数据(ByteArrayOutputStream可以把字节一次性记录下来,
      这样就可以避免一些字符的字节码不一致导致发送后解析出现乱码;
      ByteArrayOutputStream的功能与StringBuilder的作用有异曲同工之妙。)
      */
      baos = new ByteArrayOutputStream();
      byte[] buffer = new byte[5];
      int len;
      while ((len = is.read(buffer)) != -1) {
        baos.write(buffer, 0, len);
      }
      System.out.println(baos.toString());
    }catch (IOException e){
      e.printStackTrace();
    }
    finally{
      //关闭流
      if (baos!=null){
        try {
          baos.close();
        }catch (IOException e){
          e.printStackTrace();
        }
      }
      if (is!=null){
        try {
          is.close();
        }catch (IOException e){
          e.printStackTrace();
        }
      }
      if (socket!=null){
        try {
          socket.close();
        }catch (IOException e){
          e.printStackTrace();
        }
      }
      if (ss!=null){
        try {
          ss.close();
        }catch (IOException e){
          e.printStackTrace();
        }
      }
    }
  }
}

注意:在Intellij idea中运行时,需先打开两个端的平行运行设置,操作如下:

最后的运行结果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java如何加载外部Jar的类并通过反射调用类的方法

    Java如何加载外部Jar的类并通过反射调用类的方法

    这篇文章主要介绍了Java如何加载外部Jar的类并通过反射调用类的方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java 中的 BufferedReader 介绍_动力节点Java学院整理

    Java 中的 BufferedReader 介绍_动力节点Java学院整理

    BufferedReader 是缓冲字符输入流。它继承于Reader。接下来通过本文给大家介绍BufferedReader的相关知识,需要的朋友参考下吧
    2017-05-05
  • Mybatis注解开发@Select执行参数和执行sql语句的方式(最新详解)

    Mybatis注解开发@Select执行参数和执行sql语句的方式(最新详解)

    @Select 是 Mybatis 框架中的一个注解,用于执行 SQL 查询语句,并把查询结果映射到指定的 Java 对象中,这篇文章主要介绍了Mybatis注解开发@Select执行参数和执行sql语句的方式,需要的朋友可以参考下
    2023-07-07
  • Java数据类型转换详解

    Java数据类型转换详解

    这篇文章主要讲解Java中基本数据类型、字符串与其它数据类型以及常见的日期类型的转换,希望能给大家做一个参考。
    2016-06-06
  • 每日六道java新手入门面试题,通往自由的道路--JVM

    每日六道java新手入门面试题,通往自由的道路--JVM

    这篇文章主要为大家分享了最有价值的6道JVM面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,对hashCode方法的设计、垃圾收集的堆和代进行剖析,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • java使用IO流对数组排序实例讲解

    java使用IO流对数组排序实例讲解

    在本篇文章里小编给大家整理的是一篇关于java使用IO流对数组排序实例讲解内容,有兴趣的朋友们可以学习下。
    2021-02-02
  • SpringBoot中使用AOP打印接口日志的方法

    SpringBoot中使用AOP打印接口日志的方法

    本篇文章主要介绍了SpringBoot中使用AOP打印接口日志的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 分析java并发中的wait notify notifyAll

    分析java并发中的wait notify notifyAll

    一个线程修改一个对象的值,而另一个线程则感知到了变化,然后进行相应的操作,这就是wait()、notify()和notifyAll()方法的本质。本文将详细来介绍它们概念实现以及区别
    2021-06-06
  • mybatis中映射文件include标签的应用

    mybatis中映射文件include标签的应用

    这篇文章主要介绍了mybatis中映射文件include标签的应用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • springboot整合httpClient代码实例

    springboot整合httpClient代码实例

    这篇文章主要介绍了springboot整合httpClient代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12

最新评论