java selector write_java selector

1 importjava.io.IOException;2 importjava.net.InetSocketAddress;3 importjava.net.ServerSocket;4 importjava.nio.ByteBuffer;5 importjava.nio.channels.SelectionKey;6 importjava.nio.channels.Selector;7 importjava.nio.channels.ServerSocketChannel;8 importjava.nio.channels.SocketChannel;9 importjava.util.Iterator;10 importjava.util.Set;11

12 /**

13 * Created by 58 on 2016/11/28.14 */

15 public classSelectorServer {16 public static voidmain(String args[]){17 startServer();18 }19 public static ByteBuffer sendBuffer = ByteBuffer.allocate(1024);20 public static ByteBuffer receiveBuffer = ByteBuffer.allocate(1024);21

22 public static voidstartServer(){23 //用两个channel监听两个端口

24 int listenPort = 8888;25 int listenPort1 = 8889;26 sendBuffer.put("message from server".getBytes());27

28 try{29 //创建serverchannel,绑定对应的端口

30 ServerSocketChannel serverSocketChannel =ServerSocketChannel.open();31 ServerSocket serverSocket =serverSocketChannel.socket();32 InetSocketAddress inetSocketAddress = newInetSocketAddress(listenPort);33 serverSocket.bind(inetSocketAddress);34

35 //创建第二个channel

36 ServerSocketChannel serverSocketChannel1 =ServerSocketChannel.open();37 ServerSocket serverSocket1 =serverSocketChannel1.socket();38 InetSocketAddress inetSocketAddress1 = newInetSocketAddress(listenPort1);39 serverSocket1.bind(inetSocketAddress1);40

41

42 //创建selector对象

43 Selector selector =Selector.open();44

45 //设置channel注册到selector中

46 serverSocketChannel.configureBlocking(false);47 serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);48

49 //第二个channel

50 serverSocketChannel1.configureBlocking(false);51 serverSocketChannel1.register(selector, SelectionKey.OP_ACCEPT);52

53 System.out.println("start to listen port: " +listenPort);54 System.out.println("start to listen port: " +listenPort1);55

56 //监听端口

57 while(true){58 int readyChannels =selector.select();59 if(readyChannels == 0)60 continue;61 Set selectedKeys =selector.selectedKeys();62 Iterator iterator =selectedKeys.iterator();63 while(iterator.hasNext()){64 SelectionKey selectionKey =iterator.next();65 dealSelectionKey(selector, selectionKey);66

67 iterator.remove();68 }//while

69 }//while

70

71

72 } catch(IOException e) {73 e.printStackTrace();74 }75 }76

77 public static voiddealSelectionKey(Selector selector, SelectionKey selectionKey){78 try{79 //准备好接收新的连接

80 if(selectionKey.isAcceptable()){81 ServerSocketChannel serverSocketChannel =(ServerSocketChannel) selectionKey.channel();82 SocketChannel clientSocketChannel =serverSocketChannel.accept();83 clientSocketChannel.configureBlocking(false);84 clientSocketChannel.register(selector, SelectionKey.OP_READ |SelectionKey.OP_WRITE);85 System.out.println("channel is ready acceptable");86 }87 else if(selectionKey.isConnectable()){88 selectionKey.channel().register(selector, SelectionKey.OP_READ);89 System.out.println("channel is connectable.");90 }91 else if(selectionKey.isReadable()){92 //读去客户端内容

93 SocketChannel clientSocketChannel =(SocketChannel) selectionKey.channel();94 receiveBuffer.clear();95 clientSocketChannel.read(receiveBuffer);96 selectionKey.interestOps(SelectionKey.OP_WRITE);97 System.out.println("message from client is: " + newString(receiveBuffer.array()));98 System.out.println("Thread id : " +Thread.currentThread().getId());99 }100 else if(selectionKey.isWritable()){101 //向客户端写数据

102 SocketChannel clientSocketChannel =(SocketChannel) selectionKey.channel();103 sendBuffer.flip();104 System.out.println("sendBuffer = " + newString(sendBuffer.array()));105 clientSocketChannel.write(sendBuffer);106 selectionKey.interestOps(SelectionKey.OP_READ);107 System.out.println("channle is writable.");108 }//else if

109 }catch(Exception e){110

111 }112 }113 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值