# HG changeset patch # User kono # Date 1219711928 -32400 # Node ID 80ef604d09dc92d31091e8c6f4be56bab8be4415 # Parent 99e598a1dbf83a4c3c98314f9104d28c6f5c435d *** empty log message *** diff -r 99e598a1dbf8 -r 80ef604d09dc rep/ServerSample.java --- a/rep/ServerSample.java Thu Jan 17 07:29:54 2008 +0900 +++ b/rep/ServerSample.java Tue Aug 26 09:52:08 2008 +0900 @@ -6,88 +6,88 @@ public class ServerSample { -public static void main(String[] argv) -throws Exception -{ -// ƒZƒŒƒNƒ^‚Ì—pˆÓ -Selector selector = Selector.open(); + public static void main(String[] argv) + throws Exception + { + // セレクタã®ç”¨æ„ + Selector selector = Selector.open(); -// ƒT[ƒoƒ\ƒPƒbƒgƒ`ƒƒƒ“ƒlƒ‹‚ðì¬B5100”Ôƒ|[ƒg‚ðŽó•tƒ|[ƒg‚ÉŽw’è -// i”ñƒuƒƒbƒNƒ‚[ƒh‚ÉÝ’èFd—vj -ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); -serverSocketChannel.configureBlocking(false); -serverSocketChannel.socket().bind(new InetSocketAddress(5100)); + // サーãƒã‚½ã‚±ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã‚’作æˆã€‚5100番ãƒãƒ¼ãƒˆã‚’å—付ãƒãƒ¼ãƒˆã«æŒ‡å®š + // (éžãƒ–ロックモードã«è¨­å®šï¼šé‡è¦ï¼‰ + ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); + serverSocketChannel.configureBlocking(false); + serverSocketChannel.socket().bind(new InetSocketAddress(5100)); -// ƒZƒŒƒNƒ^‚ɃT[ƒoƒ\ƒPƒbƒgƒ`ƒƒƒ“ƒlƒ‹‚ð“o˜^BƒT[ƒo‚Ö‚ÌŽó•t‚ðŠÄŽ‹ -serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); + // セレクタã«ã‚µãƒ¼ãƒã‚½ã‚±ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã‚’登録。サーãƒã¸ã®å—付を監視 + serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); -// ƒZƒŒƒNƒ^‚ɃCƒxƒ“ƒg‚ª’Ê’m‚³‚ê‚邲‚ƂɈ— -while (true) { + // セレクタã«ã‚¤ãƒ™ãƒ³ãƒˆãŒé€šçŸ¥ã•ã‚Œã‚‹ã”ã¨ã«å‡¦ç† + while (true) { -// ƒZƒŒƒNƒ^‚ɃCƒxƒ“ƒg‚ª”­¶‚·‚é‚܂ŃuƒƒbƒN -selector.select(); + // セレクタã«ã‚¤ãƒ™ãƒ³ãƒˆãŒç™ºç”Ÿã™ã‚‹ã¾ã§ãƒ–ロック + selector.select(); -// Šl“¾‚µ‚½ƒCƒxƒ“ƒg‚²‚ƂɈ—‚ðŽÀs -for (SelectionKey selectionKey : selector.selectedKeys()) { + // ç²å¾—ã—ãŸã‚¤ãƒ™ãƒ³ãƒˆã”ã¨ã«å‡¦ç†ã‚’実行 + for (SelectionKey selectionKey : selector.selectedKeys()) { -// ƒT[ƒo‚ÌŽó•tˆ—: -// ƒCƒxƒ“ƒg‚ªŽó•t‰Â”\‚Å‚ ‚éê‡AŽó‚¯•t‚¯‚é‚ׂ«‘ÎÛ‚ª‚ ‚ê‚Î -// ƒZƒŒƒNƒ^‚Ɏ擾‚µ‚½ƒ\ƒPƒbƒgƒ`ƒƒƒ“ƒlƒ‹‚ð“o˜^ -if (selectionKey.isAcceptable()) { + // サーãƒã®å—付処ç†: + // イベントãŒå—付å¯èƒ½ã§ã‚ã‚‹å ´åˆã€å—ã‘付ã‘ã‚‹ã¹ã対象ãŒã‚れ㰠+ // セレクタã«å–å¾—ã—ãŸã‚½ã‚±ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã‚’登録 + if (selectionKey.isAcceptable()) { -// ƒT[ƒoƒ\ƒPƒbƒgƒ`ƒƒƒ“ƒlƒ‹‚©‚çƒ\ƒPƒbƒgƒ`ƒƒƒ“ƒlƒ‹‚ðŠl“¾ -// ƒ\ƒPƒbƒgƒ`ƒƒƒ“ƒlƒ‹‚ðŒo—R‚µ‚ăNƒ‰ƒCƒAƒ“ƒg‚Æ’ÊM‚Å‚«‚é -SocketChannel socketChannel = serverSocketChannel.accept(); + // サーãƒã‚½ã‚±ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã‹ã‚‰ã‚½ã‚±ãƒƒãƒˆãƒãƒ£ãƒ³ãƒãƒ«ã‚’ç²å¾— + // ソケットãƒãƒ£ãƒ³ãƒãƒ«ã‚’経由ã—ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨é€šä¿¡ã§ãã‚‹ + SocketChannel socketChannel = serverSocketChannel.accept(); -// Ú‘±æ‚ª‚È‚­‚Ä‚à‚±‚±‚Ɉ—‚ª”ò‚Ô‚±‚Æ‚ª‚ ‚éB‘ÎÛ‚ª -// null‚Ìꇂ͈—‚𔲂¯‚é -if (null == socketChannel) continue; + // 接続先ãŒãªãã¦ã‚‚ã“ã“ã«å‡¦ç†ãŒé£›ã¶ã“ã¨ãŒã‚る。対象㌠+ // nullã®å ´åˆã¯å‡¦ç†ã‚’抜ã‘ã‚‹ + if (null == socketChannel) continue; -// ƒ\ƒPƒbƒgƒ`ƒƒƒ“ƒlƒ‹‚ð”ñƒuƒƒbƒNƒ‚[ƒh‚ÉÝ’èid—vj‚µA -// ƒZƒŒƒNƒ^‚É“Ç‚Ýž‚Ý‚ð‘ÎÛ‚Æ‚µ‚Ä“o˜^ -socketChannel.configureBlocking(false); -socketChannel.register(selector, SelectionKey.OP_READ); -socketChannel = null; -} + // ソケットãƒãƒ£ãƒ³ãƒãƒ«ã‚’éžãƒ–ロックモードã«è¨­å®šï¼ˆé‡è¦ï¼‰ã—〠+ // セレクタã«èª­ã¿è¾¼ã¿ã‚’対象ã¨ã—ã¦ç™»éŒ² + socketChannel.configureBlocking(false); + socketChannel.register(selector, SelectionKey.OP_READ); + socketChannel = null; + } -// ƒNƒ‰ƒCƒAƒ“ƒg‚Æ‚Ì’ÊMˆ— -// “Çž‚݉”\‚Å‚ ‚éê‡A“à—e•¨‚ð“Ç‚Ý‚±‚ñ‚Å•W€o—Í‚É•\Ž¦B -// ƒƒbƒZ[ƒW‚ðƒNƒ‰ƒCƒAƒ“ƒg‚É‘—M‚µ‚ÄAƒRƒlƒNƒVƒ‡ƒ“‚ðØ’fB -// ƒZƒŒƒNƒ^‚©‚ç“o˜^‚ð‰ðœ -else if (selectionKey.isReadable()) { + // クライアントã¨ã®é€šä¿¡å‡¦ç† + // 読込ã¿å¯èƒ½ã§ã‚ã‚‹å ´åˆã€å†…容物を読ã¿ã“ã‚“ã§æ¨™æº–出力ã«è¡¨ç¤ºã€‚ + // メッセージをクライアントã«é€ä¿¡ã—ã¦ã€ã‚³ãƒã‚¯ã‚·ãƒ§ãƒ³ã‚’切断。 + // セレクタã‹ã‚‰ç™»éŒ²ã‚’解除 + else if (selectionKey.isReadable()) { -// “o˜^‚³‚ê‚Ä‚¢‚éƒ\ƒPƒbƒgƒ`ƒƒƒ“ƒlƒ‹‚ðŽæ“¾ -SocketChannel socketChannel = -(SocketChannel)selectionKey.channel(); + // 登録ã•ã‚Œã¦ã„るソケットãƒãƒ£ãƒ³ãƒãƒ«ã‚’å–å¾— + SocketChannel socketChannel = + (SocketChannel)selectionKey.channel(); -Charset charset = Charset.forName("US-ASCII"); -ByteBuffer byteBuffer = ByteBuffer.allocate(8192); + Charset charset = Charset.forName("US-ASCII"); + ByteBuffer byteBuffer = ByteBuffer.allocate(8192); -// ƒNƒ‰ƒCƒAƒ“ƒg‚©‚烃bƒZ[ƒW‚ÌŽóM -switch (socketChannel.read(byteBuffer)) { -case -1: -// ƒNƒ‰ƒCƒAƒ“ƒg‘¤‚ªÚ‘±‚ðØ’f‚µ‚Ä‚¢‚½ê‡‚ÍAƒT[ƒo‚à -// Ú‘±‚ðØ’fBƒZƒŒƒNƒ^‚©‚ç“o˜^‚ðíœ -socketChannel.close(); -break; -case 0: -// “Ç‚Ýž‚ނׂ«ƒƒbƒZ[ƒW‚Í“Í‚¢‚Ä‚¢‚È‚¢‚̂ň—‚ð”ò‚΂· -continue; -default: -// ƒNƒ‰ƒCƒAƒ“ƒg‚©‚烃bƒZ[ƒW‚ðŽæ“¾‚µA•W€o—Í‚Ö -byteBuffer.flip(); -System.out.print("EEE: " + charset.decode(byteBuffer)); + // クライアントã‹ã‚‰ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã®å—ä¿¡ + switch (socketChannel.read(byteBuffer)) { + case -1: + // クライアントå´ãŒæŽ¥ç¶šã‚’切断ã—ã¦ã„ãŸå ´åˆã¯ã€ã‚µãƒ¼ãƒã‚‚ + // 接続を切断。セレクタã‹ã‚‰ç™»éŒ²ã‚’削除 + socketChannel.close(); + break; + case 0: + // 読ã¿è¾¼ã‚€ã¹ãメッセージã¯å±Šã„ã¦ã„ãªã„ã®ã§å‡¦ç†ã‚’飛ã°ã™ + continue; + default: + // クライアントã‹ã‚‰ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’å–å¾—ã—ã€æ¨™æº–出力㸠+ byteBuffer.flip(); + System.out.print("EEE: " + charset.decode(byteBuffer)); -// ƒNƒ‰ƒCƒAƒ“ƒg‚ÖƒƒbƒZ[ƒW‚ð‘—M -socketChannel.write(charset.encode("Good bye!\r\n")); + // クライアントã¸ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ä¿¡ + socketChannel.write(charset.encode("Good bye!\r\n")); -// ƒNƒ‰ƒCƒAƒ“ƒg‚Æ‚ÌÚ‘±‚ðØ’fBƒZƒŒƒNƒ^‚©‚ç“o˜^‚ðíœ -//socketChannel.close(); -break; -} -} -System.out.println(selectionKey.toString()); -} -} -} + // クライアントã¨ã®æŽ¥ç¶šã‚’切断。セレクタã‹ã‚‰ç™»éŒ²ã‚’削除 + //socketChannel.close(); + break; + } + } + System.out.println(selectionKey.toString()); + } + } + } } \ No newline at end of file