NIOSocket Server Client
阿新 • • 發佈:2017-08-20
address art server 127.0.0.1 reader buffer spa 服務端 tar
最近在看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