java nio中的 serversocketchannel 是一個可以監聽新進來的tcp連接配接的通道, 就像标準io中的serversocket一樣。serversocketchannel類在 java.nio.channels包中。
這裡有個例子:
<code>01</code>
<code>serversocketchannel serversocketchannel = serversocketchannel.open();</code>
<code>02</code>
<code>03</code>
<code>serversocketchannel.socket().bind(</code><code>new</code> <code>inetsocketaddress(</code><code>9999</code><code>));</code>
<code>04</code>
<code>05</code>
<code>while</code><code>(</code><code>true</code><code>){</code>
<code>06</code>
<code> </code><code>socketchannel socketchannel =</code>
<code>07</code>
<code> </code><code>serversocketchannel.accept();</code>
<code>08</code>
<code>09</code>
<code> </code><code>//do something with socketchannel...</code>
<code>10</code>
<code>}</code>
通過調用 serversocketchannel.open() 方法來打開serversocketchannel.如:
<code>1</code>
通過調用serversocketchannel.close() 方法來關閉serversocketchannel. 如:
<code>serversocketchannel.close();</code>
通過 serversocketchannel.accept() 方法監聽新進來的連接配接。當 accept()方法傳回的時候,它傳回一個包含新進來的連接配接的 socketchannel。是以, accept()方法會一直阻塞到有新連接配接到達。
通常不會僅僅隻監聽一個連接配接,在while循環中調用 accept()方法. 如下面的例子:
<code>2</code>
<code>3</code>
<code>4</code>
<code>5</code>
<code>6</code>
當然,也可以在while循環中使用除了true以外的其它退出準則。
serversocketchannel可以設定成非阻塞模式。在非阻塞模式下,accept() 方法會立刻傳回,如果還沒有新進來的連接配接,傳回的将是null。 是以,需要檢查傳回的socketchannel是否是null.如:
<code>serversocketchannel.configureblocking(</code><code>false</code><code>);</code>
<code> </code><code>if</code><code>(socketchannel !=</code><code>null</code><code>){</code>
<code>11</code>
<code> </code><code>//do something with socketchannel...</code>
<code>12</code>
<code> </code><code>}</code>
<code>13</code>