Java BIO实现聊天程序

yizhihongxing

下面我就为您详细讲解“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实现聊天程序的完整攻略。

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

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

相关文章

  • JSP中动态合并单元格的实例代码

    这里提供一份“JSP中动态合并单元格的实例代码”的完整攻略,希望能够帮到您。 前言 在开发Web应用时,我们经常需要在表格中合并相邻单元格以达到更好的显示效果,而如果表格的内容来自于数据源,我们又该如何完成动态合并单元格的操作呢?下面,我将提供一些示例代码,帮助大家实现这一功能。 实现方式 实现动态合并单元格的方法有很多,这里以JSP中使用Java代码的方式…

    Java 2023年6月15日
    00
  • 什么是线程优先级?

    以下是关于线程优先级的完整使用攻略: 什么是线程优先级? 线程优先级是指线程在竞争 CPU 资源时的优先级。线程优先级越高,就有可能获得 CPU 资源,从而更快地执行任务。线程优先级的取值范围是 1~10,其中 1 表示低先级,10 表示最高优先级。 线程优先级的设置 线程优先级的设置需要使用 Thread 类的 setPriority() 方法来实现。在 …

    Java 2023年5月12日
    00
  • 如何清除网页上的不明的浮动广告和漂浮的图片

    清除网页上的浮动广告和漂浮图片可以通过CSS实现。以下是实现步骤: 步骤一:找到不明的浮动广告和漂浮的图片的CSS选择器 首先,需要找到这些浮动元素的CSS选择器名称,这可以通过浏览器开发者工具中的“选取元素”功能找到。开发者工具会显示当前选定元素的CSS选择器。如果找到的是一个广告插件,则可以通过插件名称或插件代码中的唯一标识符来查找。 例如,如果要删除百…

    Java 2023年5月23日
    00
  • java网络通信技术之简单聊天小程序

    这里是关于“Java网络通信技术之简单聊天小程序”的完整攻略。 简介 本篇攻略将为大家介绍如何使用Java网络通信技术开发简单聊天小程序。 聊天小程序主要由客户端和服务端两个部分组成,它们之间通过网络通信进行交互。在Java中,可以使用Socket实现网络通信。 下面我们将由客户端和服务端两个方面详细讲解。 客户端 客户端主要负责向服务端发送信息,并接收服务…

    Java 2023年5月23日
    00
  • springboot使用AOP+反射实现Excel数据的读取

    针对“springboot使用AOP+反射实现Excel数据的读取”的完整攻略,我将从以下几个方面进行详细讲解: AOP的介绍 反射的介绍 将AOP和反射结合起来实现Excel数据的读取 示例1:使用AOP+反射实现读取一个Excel文件 示例2:使用AOP+反射实现批量读取多个Excel文件 以下是具体的介绍和示例。 1. AOP的介绍 AOP(Aspec…

    Java 2023年5月20日
    00
  • 三种Java打印PDF文档的实例代码

    接下来我将为您详细讲解“三种Java打印PDF文档的实例代码”的完整攻略。 1. 使用Java本身的打印功能 Java本身提供了一些打印功能,可以帮助我们打印PDF文档。下面是使用Java本身的打印功能的示例代码: import java.awt.print.PrinterJob; import javax.print.PrintService; impor…

    Java 2023年5月19日
    00
  • java安全编码指南之:对象构建操作

    Java安全编码指南之对象构建操作 在Java编程中,对象构建操作是非常常见的操作,但如果不正确处理这些操作,就容易出现安全风险。这里我们将介绍一些关于对象构建操作的安全编码指南。 避免使用反射 API 的 newInstance 方法 反射 API 的 newInstance 方法可以通过 Class 对象动态实例化对象,但是存在一些安全风险。例如,如果创…

    Java 2023年5月20日
    00
  • 教你轻松制作java视频播放器

    教你轻松制作Java视频播放器攻略 1. 软件准备 首先需要准备以下开发环境和工具:- JDK:Java开发工具包,用来编译和运行Java程序,建议使用JDK 8及以上版本。- Eclipse IDE:一款开源的Java集成开发环境,可以进行Java程序的编辑、编译、调试等操作。当然也可以使用其他集成开发环境,如NetBeans等。 2. 开始制作 步骤一:…

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