public class SelectorServiceDemo {
public static void main(String[] args) throws IOException {
int port = 8000;
Selector selector = Selector.open();
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
ServerSocket serverSocket = serverSocketChannel.socket();
InetSocketAddress address = new InetSocketAddress(port);
serverSocket.bind(address);
serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT);
System.out.println("服務(wù)器,端口:"+port);
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
while (true){
if ((selector.select())>0){
Set<SelectionKey>selectionKeys = selector.selectedKeys();
Iterator<SelectionKey>iter = selectionKeys.iterator();
while (iter.hasNext()){
SelectionKey key = iter.next();
if (key.isAcceptable()){
acceptable(selector,byteBuffer,key);
}else if (key.isReadable()&& key.isValid()){
reabable(selector,byteBuffer,key);
}else if (key.isWritable() && key.isValid()){
writable(selector,byteBuffer,key);
}
}
//清除全部的key
selectionKeys.clear();
}
}
}
private static void writable(Selector selector, ByteBuffer byteBuffer, SelectionKey key) throws IOException {
SocketChannel client = (SocketChannel) key.channel();
byteBuffer.clear();
// 向緩沖區(qū)中設(shè)置內(nèi)存
byteBuffer.put(("歡迎進(jìn)入NIO學(xué)習(xí)").getBytes());
byteBuffer.flip();
// 輸入內(nèi)容
client.write(byteBuffer);
client.register(selector,SelectionKey.OP_READ);
}
private static void reabable(Selector selector, ByteBuffer byteBuffer, SelectionKey key) throws IOException {
SocketChannel client = (SocketChannel) key.channel();
byteBuffer.clear();
//讀取內(nèi)容到緩沖區(qū)
int readSiza = client.read(byteBuffer);
if (readSiza >0){
System.out.println("服務(wù)器接受客服端數(shù)據(jù)"+new String(byteBuffer.array(),0,readSiza));
client.register(selector,SelectionKey.OP_WRITE);
}
}
private static void acceptable(Selector selector, ByteBuffer byteBuffer, SelectionKey key) throws IOException {
ServerSocketChannel server = (ServerSocketChannel) key.channel();
SocketChannel client = server.accept();
client.write(byteBuffer);;
client.register(selector,SelectionKey.OP_READ);
}
}
服務(wù)端 (代碼Java)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 參考官方github代碼例子:https://github.com/grpc/grpc-java/tree/mas...
- 讓java變成腳本語言 - Ken-專注后端技術(shù) - ITeye技術(shù)網(wǎng)站http://janeky.iteye.c...
- 最近折騰了一下文件上傳的方法,網(wǎng)上雖然有不少封裝好的,但是基于RxJava2+Retrofit 帶上傳進(jìn)度的還沒有...