標籤:mil hello message style oca sage catch 架構 server
最近在看Netty架構,順便寫了一下NIO SocketChannel服務端和用戶端
Server.java
import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;/** * Created by guanxianseng on 2017/8/18. */public class Server { private static void readMessage() throws IOException { ServerSocketChannel server = ServerSocketChannel.open(); server.socket().bind(new InetSocketAddress(8888)); while(true){ SocketChannel client = server.accept(); ByteBuffer buffer = ByteBuffer.allocate(1024); client.read(buffer); System.out.println("Server received msg = " + new String(buffer.array())); sendMessage(client); } } private static void sendMessage(SocketChannel client) throws IOException { ByteBuffer buffer = ByteBuffer.allocate(1024); String msg = "Server Time = " + System.currentTimeMillis(); buffer.put(msg.getBytes()); buffer.flip(); client.write(buffer); } public static void main(String[] args) throws IOException { readMessage(); }}
Client.java
import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SocketChannel;/** * Created by guanxianseng on 2017/8/18. */public class Client { private static SocketChannel client = null; static { try { init(); } catch (IOException e) { e.printStackTrace(); } } private static void init() throws IOException { client = SocketChannel.open(); client.connect(new InetSocketAddress("127.0.0.1", 8888)); } private static void sendMessage(String message) throws IOException { ByteBuffer buffer = ByteBuffer.allocate(1024); buffer.put(message.getBytes()); buffer.flip(); while(buffer.hasRemaining()){ client.write(buffer); }// client.close(); } private static void readMessage(){ Thread reader = new Thread(new Runnable() { @Override public void run() { ByteBuffer buffer = ByteBuffer.allocate(1024); try { client.read(buffer);// buffer.flip(); System.out.println(new String(buffer.array())); } catch (IOException e) { e.printStackTrace(); } } }); reader.start(); } public static void main(String[] args) throws IOException { sendMessage("hello nio"); readMessage(); }}
整個套路和Socket、ServerSocket套路是一樣的,這是阻塞形式的。NIO可以設定為非阻塞,這需要配合使用Selector。這種就和Socket、ServerSocket就不一樣了
NIOSocket Server Client