下面我就为您详细讲解“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技术站