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

所属分类: 软件编程 / java 阅读数: 48
收藏 0 赞 0 分享

你好我是辰兮,很高兴你能来阅读,本篇总结了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控制台,看到回复的信息然后继续回复


双向沟通交流实现

更多精彩内容其他人还在看

SpringBoot中使用Ehcache的详细教程

EhCache 是一个纯 Java 的进程内缓存框架,具有快速、精干等特点,是 Hibernate 中默认的 CacheProvider。这篇文章主要介绍了SpringBoot中使用Ehcache的相关知识,需要的朋友可以参考下
收藏 0 赞 0 分享

在idea 中添加和删除模块Module操作

这篇文章主要介绍了在idea 中添加和删除模块Module操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java spring整合junit操作(有详细的分析过程)

这篇文章主要介绍了java spring整合junit操作(有详细的分析过程),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解JAVA 弱引用

这篇文章主要介绍了 JAVA 弱引用的相关资料,帮助大家更好的理解和学习java引用对象,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

深入了解JAVA 虚引用

这篇文章主要介绍了JAVA 虚引用的相关资料,帮助大家更好的理解和学习JAVA,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解JAVA 强引用

这篇文章主要介绍了JAVA 强引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

java中的按位与(&)用法说明

这篇文章主要介绍了java中的按位与(&)用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
收藏 0 赞 0 分享

深入了解JAVA 软引用

这篇文章主要介绍了JAVA 软引用的相关资料,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

利用MyBatis实现条件查询的方法汇总

这篇文章主要给大家介绍了关于利用MyBatis实现条件查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用MyBatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.PathTranslator was bound

这篇文章主要介绍了Intellij IDEA 与maven 版本不符 Unable to import maven project See logs for details: No implementation for org.apache.maven.model.path.Pa
收藏 0 赞 0 分享
查看更多