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实现聊天程序的完整攻略。

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

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

相关文章

  • Java 数组详解及示例代码

    Java 数组详解及示例代码 什么是数组 数组(Array)是由相同类型的数据按照一定的顺序排列而成的集合,是Java程序设计中最基本的数据结构之一。 在Java中,数组可以看成是一种容器,可以存放多个同类型的数据。其中每个数据被称为元素(Element),而在数组中,每个元素可以通过一个编号(Index)进行唯一标识。 创建数组 在Java中,创建数组有两…

    Java 2023年5月23日
    00
  • 常见的Atomic类有哪些?

    当我们使用多线程编程时,为了保证多线程程序的正确性和同步性,我们很常使用 Atomic 类型来进行操作。Atomic 类可以保证某个操作的原子性,避免数据竞争等问题。在Java中,Java.util.concurrent.atomic 包下提供了一些常见的 Atomic 类。接下来,我将会具体讲解这些 Atomic 类的使用方法和注意事项。 AtomicIn…

    Java 2023年5月11日
    00
  • zookeeper实战之实现分布式锁的方法

    Zookeeper实战之实现分布式锁的方法 在分布式系统中,锁是必不可少的,实现分布式锁的方法有很多种,而使用Zookeeper作为分布式锁的实现也是一种比较可靠的方式。 Zookeeper简介 Zookeeper是一个分布式的开源协调服务框架,使用Zookeeper可以实现分布式锁、数据发布/订阅、命名服务、元数据管理、分布式协调/通知等功能。 原理解析 …

    Java 2023年5月20日
    00
  • Java实现字符串和输入流的相互转换

    下面是“Java实现字符串和输入流的相互转换”的完整攻略: 1. 字符串转输入流 可以使用Java中的StringBufferInputStream或ByteArrayInputStream将字符串转化为输入流对象。 使用StringBufferInputStream String str = "Hello, World!"; Input…

    Java 2023年5月26日
    00
  • EL表达式截取字符串的函数说明

    下面是关于EL表达式截取字符串的函数说明的完整攻略: EL表达式截取字符串的函数说明 在EL表达式中,有两个函数可以用来截取字符串:fn:substring()和fn:substringAfter()。下面我们来详细讲解一下这两个函数的用法和示例。 fn:substring() fn:substring()函数可以用来截取字符串中的一段子串,它的语法如下: …

    Java 2023年6月15日
    00
  • 浅谈JSP与Servlet传值及对比(总结)

    浅谈JSP与Servlet传值及对比(总结)是一篇比较详细介绍 JSP 和 Servlet 之间数据传递的文章。在该文章中,作者讲述了JSP和Servlet传值的几种方式以及它们在不同情况下的使用情况。 1. JSP与Servlet JSP和Servlet是相互联系的,JSP可以添加Java代码,Servlet可以生成HTML代码。JSP和Servlet重点…

    Java 2023年6月15日
    00
  • Java字节码中jvm实例用法

    Java字节码是Java源代码被编译后的中间产物,是一种针对Java虚拟机(JVM)执行的二进制格式。Java程序在运行前,需要使用Java编译器进行编译,得到对应的.class字节码文件,然后再由JVM将字节码文件解释执行。 Java字节码中包含了JVM实例的相关信息,这些信息可以用于分析和调试Java应用程序。下面是一些常用的Java字节码中JVM实例的…

    Java 2023年5月23日
    00
  • SpringBoot配置MyBatis-Plus实现增删查改

    下面我将详细讲解“SpringBoot配置MyBatis-Plus实现增删查改”的完整攻略。 步骤一:引入依赖 在pom.xml文件中添加MyBatis-Plus和MySQL的依赖: <dependencies> <dependency> <groupId>com.baomidou</groupId> <…

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