Java Scoket实现双向通信代码详解

 更新时间:2020年06月24日 09:39:12   作者:辰兮要努力  
这篇文章主要介绍了Java Scoket实现双向通信代码详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

你好我是辰兮,很高兴你能来阅读,本篇总结了Java Scoket类的相关知识,并且整理了实现双向通信的相关代码也有案例实现截图,分享获取新知,大家一起进步。

一、网络通信

网络通信,在网络中程序(发送者)与程序(接受者)之间的数据交互。

通信要素①ip + 端口号 ②传输协议

java.net包: 包含了Java用于网络通信所需的类。

ServerSocket类,用于表示网络服务

创建网络服务(创建ServerSocket对象)

//构造器
public ServerSocket(int port)

//创建网络服务
ServerSocket server = new ServerSocket(9999);

接收网络请求

//接收网络请求的方法
public Socket accept()

//网络服务接收请求(阻塞)
Socket socket = server.accept();

Socket类,网络套接字,表示网络连接

发送网络请求
//构造器
public Socket(String ip, int port)
//获取网络连接中的输入流
public InputStream getInputStream()
//获取网络连接中的输出流
public OuputStream getOutputStream()

二、接受者(Receiver)

代码实现如下:信息的接受者

public class Receiver {

  public static void main(String[] args) {

    try {
      ServerSocket server = new ServerSocket(8888);
      Socket socket = server.accept();
      System.out.println("----程序已经连接++++");
      InputStream is = socket.getInputStream();
      OutputStream os = socket.getOutputStream();
      InputStreamReader isr = new InputStreamReader(is);
      BufferedReader br = new BufferedReader(isr);
      PrintWriter pw = new PrintWriter(os);
      Runnable r1 = new Runnable() {
        @Override
        public void run() {
          while (true) {
            // 接受信息
            String str;
            try {
              str = br.readLine();
              System.out.println("sender的信息" + str);
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
      };
      Runnable r2 = new Runnable() {
        @Override
        public void run() {
          // 返回信息
          while (true) {
            Scanner scan = new Scanner(System.in);
            String msg = scan.nextLine();
            pw.println(msg);
            pw.flush();
          }
        }
      };
      
      Thread t1 = new Thread(r1);
      Thread t2 = new Thread(r2);
      t1.start();
      t2.start();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

三、发送者(Sender)

代码实现如下:信息的发送者

public class Sender {

  public static void main(String[] args) {
    try {
      Socket socket = new Socket("192.168.1.6", 8888);
      InputStream is = socket.getInputStream();
      OutputStream os = socket.getOutputStream();
      InputStreamReader isr = new InputStreamReader(is);
      BufferedReader br = new BufferedReader(isr);
      PrintWriter pw = new PrintWriter(os);
      Runnable r = new Runnable() {
        @Override
        public void run() {
          while (true) {
            // 发送信息

            try {
              Scanner scan = new Scanner(System.in);
              String msg = scan.nextLine();
              pw.println(msg);
              pw.flush();
            } catch (Exception e) {
            }

          }

        }
      };

      Runnable r2 = new Runnable() {
        @Override
        public void run() {
          // 接受发送的信息
          while (true) {
            String str;
            try {
              str = br.readLine();
              System.out.println("接受者receiver:" + str);
            } catch (IOException e) {
              e.printStackTrace();
            }
          }
        }
      };
      Thread t1 = new Thread(r);
      Thread t2 = new Thread(r2);
      t1.start();
      t2.start();

    } catch (UnknownHostException e) {

      e.printStackTrace();
    } catch (IOException e) {

      e.printStackTrace();
    }
  }
}

四、案例截图

首先看到开启Receiver,然后开启Sender

开启Sender后----看到Receiver控制台显示连接成功


Sender发送信息


Receiver接受到信息,然后回复


点开Sender控制台,看到回复的信息然后继续回复


双向沟通交流实现

到此这篇关于Java Scoket实现双向通信代码详解的文章就介绍到这了,更多相关Java Scoket 双向通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot ThreadLocal 简单介绍及使用详解

    SpringBoot ThreadLocal 简单介绍及使用详解

    ThreadLocal 叫做线程变量,意思是 ThreadLocal 中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量,这篇文章主要介绍了SpringBoot ThreadLocal 的详解,需要的朋友可以参考下
    2024-01-01
  • IDEA中的Kafka管理神器详解

    IDEA中的Kafka管理神器详解

    这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验
    2025-01-01
  • RestTemplate文件上传下载与大文件流式下载

    RestTemplate文件上传下载与大文件流式下载

    这篇文章主要为大家介绍了RestTemplate文件上传下载与大文件流式下载的使用方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步
    2022-03-03
  • Java Swing null绝对布局的实现示例

    Java Swing null绝对布局的实现示例

    这篇文章主要介绍了Java Swing null绝对布局的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • spring声明式事务 @Transactional 不回滚的多种情况以及解决方案

    spring声明式事务 @Transactional 不回滚的多种情况以及解决方案

    本文主要介绍了spring声明式事务 @Transactional 不回滚的多种情况以及解决方案,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java正则表达式,提取双引号中间的部分方法

    Java正则表达式,提取双引号中间的部分方法

    今天小编就为大家分享一篇Java正则表达式,提取双引号中间的部分方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Springboot单元测试编写实践

    Springboot单元测试编写实践

    在日常的开发过程中,为了提高代码的可靠性和健壮性,同时也是检测代码的质量,减少测试环节的问题,会对完成的业务功能代码编写单元测试,在本文中,将分享一些单元测试的实践和心得,需要的朋友可以参考下
    2023-11-11
  • SpringCloud Eureka 服务注册实现过程

    SpringCloud Eureka 服务注册实现过程

    这篇文章主要介绍了SpringCloud Eureka 服务注册实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Java Comparable 和 Comparator 的详解及区别

    Java Comparable 和 Comparator 的详解及区别

    这篇文章主要介绍了Java Comparable 和 Comparator 的详解及区别的相关资料,Comparable 自然排序和Comparator 定制排序的实例,需要的朋友可以参考下
    2016-12-12
  • jvm-jstack常用的用法示例

    jvm-jstack常用的用法示例

    jstack 是一个常用的用于分析 Java 进程的工具。它可以显示 Java 进程中所有线程状态和堆栈信息,帮助定位 Java 进程中的问题,这篇文章主要介绍了jvm-jstack常用的用法示例,需要的朋友可以参考下
    2023-06-06

最新评论