BIO 就是同步阻塞IO,一个线程只能同时做一件事,如果不能读或者不能写就会阻塞。
实现的聊天软件的客户端代码如下:
package mynetty_study.netty.bio;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
/**
*
*类名:BIOClient.java
*类的描述信息:BIO客户端
*创建时间:2018年11月12日
*
*/
public class BIOClient {
private static final int port = 8888;
private static final String ip = "127.0.0.1";
/**
*
*方法描述:
*返回参数是:void
* @param args
* @throws IOException
* @throws UnknownHostException
*/
public static void main(String[] args) {
System.out.println("login");
Scanner in=new Scanner(System.in);
while(true){
System.out.print("我:");
transf(in.nextLine());
}
}
private static void transf(String string) {
Socket scoket = null;
OutputStream out = null;
InputStream in = null;
try {
scoket = new Socket(ip,port);
out = scoket.getOutputStream();
in = scoket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
PrintWriter printWriter = new PrintWriter(out,true);
printWriter.println(string);
String str = null;
if((str=bufferedReader.readLine())!=null){
System.out.println("服务器用户:"+str);
}
printWriter.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(out!=null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(scoket!=null){
try {
scoket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
服务端代码如下:
package mynetty_study.netty.bio;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
*
*类名:BIOServer.java
*类的描述信息:
*创建时间:2018年11月12日
*
*/
public class BIOServer {
private static final int port = 8888;
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("login");
while(true){
Socket socket = serverSocket.accept();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String result = null;
if((result = bufferedReader.readLine())!=null){
System.out.println("客户端用户:"+result);
}
PrintWriter printWriter = new PrintWriter(socket.getOutputStream(),true);
Scanner in=new Scanner(System.in);
System.out.print("我:");
in=new Scanner(System.in);
printWriter.println(in.nextLine());
printWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
实现效果如下: