Java BIO实现聊天程序

下面我就为您详细讲解“Java BIO实现聊天程序”的完整攻略。首先,我们需要了解什么是BIO(Blocking IO)。

什么是BIO

BIO是Java中IO的一种传统模型,它与操作系统提供的Input/Output是相似的。BIO的特点是同步并阻塞,即在执行输入输出过程中,如果没有数据读取,或者无法数据输出,那么将会阻塞在那里,直到有数据读取或输出。BIO通过JDK提供的InputStream和OutputStream进行数据的读写操作。

BIO聊天程序示例

接下来,我们通过两个示例来演示如何利用Java BIO实现聊天程序。

示例一:客户端向服务端发送数据

客户端代码:

import java.net.*;
import java.io.*;
public class Client{
    public static void main(String args[]){
        //定义需要连接的主机和端口
        String hostName="localhost";
        int portNumber=5001;
        try{
            //创建一个客户端套接字,并指定需要连接的主机和端口
            Socket socket=new Socket(hostName,portNumber);
            //创建输入输出流
            PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
            BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //读取从服务端发送过来的数据
            String inputLine=in.readLine();
            //输出服务器返回的数据,并关闭Socket连接
            System.out.println("Server Response: "+inputLine);
            socket.close();
        } catch(IOException e){
            System.err.println(e);
        }
    }
}

服务端代码:

import java.net.*;
import java.io.*;
public class Server{
    public static void main(String args[]){
        int portNumber=5001;
        try{
            //创建ServerSocket,并监听绑定的端口号
            ServerSocket serverSocket=new ServerSocket(portNumber);
            //阻塞当前线程,等待客户端的连接请求
            Socket clientSocket=serverSocket.accept();
            //创建输入输出流
            PrintWriter out=new PrintWriter(clientSocket.getOutputStream(),true);
            BufferedReader in=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            //向客户端输出数据
            out.println("Welcome to chat server.");
            //关闭Socket连接
            clientSocket.close();
        }catch(IOException e){
            System.err.println(e);
        }
    }
}

运行以上代码后,在命令行中输入“javac Client.java”和“javac Server.java”来进行编译,然后在命令行中分别输入“java Server”和“java Client”即可运行。

示例二:服务端接收客户端发送的数据

客户端代码:

import java.net.*;
import java.io.*;
public class Client{
    public static void main(String args[]){
        String hostName="localhost";
        int portNumber=5001;
        try{
            Socket socket=new Socket(hostName,portNumber);
            PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
            BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //读取从服务端发送过来的数据
            String inputLine;
            //从控制台读取数据,并发送给服务端
            BufferedReader stdIn=new BufferedReader(new InputStreamReader(System.in));
            while((inputLine=stdIn.readLine())!=null){
                out.println(inputLine);
                System.out.println("Server Response: "+in.readLine());
            }
            //关闭Socket连接
            socket.close();
        } catch(IOException e){
            System.err.println(e);
        }
    }
}

服务端代码:

import java.net.*;
import java.io.*;
public class Server{
    public static void main(String args[]){
        int portNumber=5001;
        try{
            ServerSocket serverSocket=new ServerSocket(portNumber);
            Socket clientSocket=serverSocket.accept();
            PrintWriter out=new PrintWriter(clientSocket.getOutputStream(),true);
            BufferedReader in=new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            //向客户端发送欢迎消息
            out.println("Welcome to chat server.");
            //接收并处理客户端发送的消息
            String inputLine;
            while((inputLine=in.readLine())!=null){
                System.out.println("Client Request: "+inputLine);
                out.println(inputLine);
            }
            //关闭Socket连接
            clientSocket.close();
        }catch(IOException e){
            System.err.println(e);
        }
    }
}

运行以上代码后,在命令行中输入“javac Client.java”和“javac Server.java”来进行编译,然后在命令行中分别输入“java Server”和“java Client”即可运行。在客户端中输入需要发送的消息即可向服务端发送数据,并接收服务端发送过来的数据。

以上就是利用Java BIO实现聊天程序的完整攻略。

阅读剩余 65%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java BIO实现聊天程序 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • java Timer测试定时调用及固定时间执行代码示例

    “java Timer测试定时调用及固定时间执行代码示例”的完整攻略 简介 在 Java 中,我们可以使用 Timer 类来实现定时调用和延时执行代码的功能。在本文中,我们将会详细的介绍 Timer 类的使用方法,并且提供两个实例来演示它的应用。 Timer 类 Timer 类提供了一种简单的机制,用于重复或延迟执行任务。任务可以是 Runnable 接口的…

    Java 2023年5月20日
    00
  • java实现随机输出300题四则运算

    实现随机输出300题四则运算,可以按照以下步骤进行: 1.确定实现方式 本任务可以使用Java编写程序实现,主要使用到Java中的随机数生成、循环、数组和文件输入输出等知识点。 2.生成题目和答案 具体的实现方式是,先随机生成两个数,并根据设定的随机数种子、操作符数量和数值范围等参数随机生成运算符和括号等标点符号,然后将随机生成的数和符号进行组合,形成一条计…

    Java 2023年5月26日
    00
  • Java编译器用maven打war包出错解决办法

    下面是详细讲解“Java编译器用maven打war包出错解决办法”的完整攻略。 问题描述 当使用Java编译器用maven打war包时,有时会遇到错误,例如“Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile)…

    Java 2023年5月19日
    00
  • Java中String的JdbcTemplate连接SQLServer数据库的方法

    下面是详细讲解如何使用JdbcTemplate连接SQLServer数据库的方法的完整攻略: 第一步:导入JDBC驱动 要使用JdbcTemplate连接SQLServer数据库,需要先导入JDBC驱动。在Maven项目中,可以在pom.xml文件中加入以下依赖: <dependency> <groupId>com.microsoft…

    Java 2023年5月20日
    00
  • MybatisPlus使用聚合函数的示例代码

    下面我将详细讲解”MybatisPlus使用聚合函数的示例代码”的完整攻略,包含以下内容: 什么是聚合函数 如何在MybatisPlus中使用聚合函数 示例代码演示 总结 1. 什么是聚合函数 聚合函数是指对一组数据进行聚合计算的函数,常用的聚合函数包括 SUM、AVG、MIN、MAX、COUNT 等。聚合函数可以对一张表或者多张表进行统计计算,常用于数据分…

    Java 2023年5月20日
    00
  • Java实现读写文件功能的代码分享

    下面是Java实现读写文件功能的完整攻略。 读文件 读文件是指从磁盘上读取文件内容到内存中。Java实现读文件可以使用InputStream、InputStreamReader、BufferedReader等类。 InputStream InputStream是Java的基本输入流,用于从源(如文件)读取字节的流。可以使用 FileInputStream 类…

    Java 2023年5月19日
    00
  • 详解Java中的do…while循环语句的使用方法

    详解Java中的do…while循环语句的使用方法 在Java中,do…while循环语句是常用的一种循环控制结构,用于在特定条件成立时重复执行某段代码,直到循环条件不再成立。 do…while循环语句的语法格式 do { // 待执行的代码块 } while (条件表达式); 其中,条件表达式可以是任何可以被转换为布尔类型的表达式,只有在该表达…

    Java 2023年5月26日
    00
  • Spring Batch批处理框架操作指南

    Spring Batch批处理框架操作指南 简介 Spring Batch是针对于处理海量数据的批处理框架,它通过创建批处理作业(Job)来完成数据的读取、处理和写入输出的操作。本指南为您提供Spring Batch的完整操作指南。 原理 Job: 对整个批处理过程进行定义与配置。 Step: 是Job的一部分,代表一个特定的处理阶段。 ItemReader…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部