BIO案例
1,BioServer.java
package com.forezp.util.io.bio.service; import javafx.scene.chart.Chart; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.nio.charset.Charset; /**** * Bio服务端 */ public class BioServer extends Thread{ private ServerSocket serverSocket = null; public static void main(String[] args) { BioServer server=new BioServer(); server.start(); } public void run(){ try { serverSocket=new ServerSocket(); serverSocket.bind(new InetSocketAddress(6000)); while (true){ //获取通道 Socket socket=serverSocket.accept(); BioServerHandler handler=new BioServerHandler(socket, Charset.forName("utf-8")); } } catch (IOException e) { throw new RuntimeException(e); } } }
2,BioServerHandler.java
package com.forezp.util.io.bio.service; import com.forezp.util.io.bio.ChannelAdapter; import com.forezp.util.io.bio.ChannelHandler; import java.net.Socket; import java.nio.charset.Charset; import java.text.SimpleDateFormat; import java.util.Date; public class BioServerHandler extends ChannelAdapter { public BioServerHandler(Socket socket, Charset charset) { super(socket, charset); } // 链接通知 @Override public void channelActive(ChannelHandler ctx) { System.out.println("LocalAddress:" + ctx.socket().getLocalAddress()); ctx.writeAndFlush("hello world! BioServer to msg for you \r\n"); } // 读取消息 @Override public void channelRead(ChannelHandler ctx, Object msg) { System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " 接收到消息:" + msg); ctx.writeAndFlush("hi 服务端已经收到你的消息Success!\r\n"); } }
3,ChannelAdapter.java
package com.forezp.util.io.bio; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.nio.charset.Charset; public abstract class ChannelAdapter extends Thread { private Socket socket; private ChannelHandler channelHandler; private Charset charset; public ChannelAdapter(Socket socket, Charset charset) { this.socket = socket; this.charset = charset; while (!socket.isConnected()) { break; } channelHandler = new ChannelHandler(this.socket, charset); channelActive(channelHandler); } @Override public void run() { try { BufferedReader input = new BufferedReader(new InputStreamReader(this.socket.getInputStream(), charset)); String str = null; while ((str = input.readLine()) != null) { channelRead(channelHandler, str); } } catch (IOException e) { e.printStackTrace(); } } // 链接通知抽象类 public abstract void channelActive(ChannelHandler ctx); // 读取消息抽象类 public abstract void channelRead(ChannelHandler ctx, Object msg); }
4,ChannelHandler.java
package com.forezp.util.io.bio; import java.io.IOException; import java.io.OutputStream; import java.net.Socket; import java.nio.charset.Charset; public class ChannelHandler { private Socket socket; private Charset charset; public ChannelHandler(Socket socket, Charset charset) { this.socket = socket; this.charset = charset; } //获取消息 public void writeAndFlush(Object msg) { OutputStream out = null; try { out = socket.getOutputStream(); out.write((msg.toString()).getBytes(charset)); out.flush(); } catch (IOException e) { e.printStackTrace(); } } public Socket socket() { return socket; } }
5,BioClient.java
package com.forezp.util.io.bio.client; import java.io.IOException; import java.net.Socket; import java.nio.charset.Charset; public class BioClient { public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1", 6000); System.out.println(" bio client start done."); BioClientHandler bioClientHandler = new BioClientHandler(socket, Charset.forName("utf-8")); bioClientHandler.start(); } catch (IOException e) { e.printStackTrace(); } } }
6,BioClientHandler.java
package com.forezp.util.io.bio.client; import com.forezp.util.io.bio.ChannelAdapter; import com.forezp.util.io.bio.ChannelHandler; import java.net.Socket; import java.nio.charset.Charset; import java.text.SimpleDateFormat; import java.util.Date; public class BioClientHandler extends ChannelAdapter { public BioClientHandler(Socket socket, Charset charset) { super(socket, charset); } @Override public void channelActive(ChannelHandler ctx) { System.out.println("链接报告LocalAddress:" + ctx.socket().getLocalAddress()); ctx.writeAndFlush("hi! BioClient to msg for you \r\n"); } @Override public void channelRead(ChannelHandler ctx, Object msg) { System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " 接收到消息:" + msg); ctx.writeAndFlush("hi 客户端已经收到你的消息Success!\r\n"); } }
运行服务端和客户端

netty框架学习之基础
好记性不如烂笔头
浙公网安备 33010602011771号