NIOSocket Server Client
最近在看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就不一样了
Please call me JiangYouDang!