<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208028&amp;view=findpost&amp;p=1744164</guid>
        <pubDate>Sat, 27 Oct 2007 19:25:23 +0000</pubDate>
        <title>Как отослать буфер всем или конкретно какому-то соединению.</title>
        <link>https://forum.sources.ru/index.php?showtopic=208028&amp;view=findpost&amp;p=1744164</link>
        <description><![CDATA[neznayka: Спасиб  :)]]></description>
        <author>neznayka</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208028&amp;view=findpost&amp;p=1743788</guid>
        <pubDate>Fri, 26 Oct 2007 21:18:56 +0000</pubDate>
        <title>Как отослать буфер всем или конкретно какому-то соединению.</title>
        <link>https://forum.sources.ru/index.php?showtopic=208028&amp;view=findpost&amp;p=1743788</link>
        <description><![CDATA[wind: Посмотрите <a class='tag-url' href='http://forum.java.sun.com/thread.jspa?threadID=348847&messageID=1445054' target='_blank'>здесь</a>. Та тема о другом, но там есть код (с ошибкой) и исправление.]]></description>
        <author>wind</author>
        <category>Java</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=208028&amp;view=findpost&amp;p=1743782</guid>
        <pubDate>Fri, 26 Oct 2007 21:10:09 +0000</pubDate>
        <title>Как отослать буфер всем или конкретно какому-то соединению.</title>
        <link>https://forum.sources.ru/index.php?showtopic=208028&amp;view=findpost&amp;p=1743782</link>
        <description><![CDATA[neznayka: Доброе время суток.<br>
Нашел пример:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">// $Id$</div><div class="code_line">&nbsp;</div><div class="code_line">import java.io.*;</div><div class="code_line">import java.net.*;</div><div class="code_line">import java.nio.*;</div><div class="code_line">import java.nio.channels.*;</div><div class="code_line">import java.util.*;</div><div class="code_line">&nbsp;</div><div class="code_line">public class Server implements Runnable</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;// The port we will listen on</div><div class="code_line">&nbsp;&nbsp;private int port;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// A pre-allocated buffer for encrypting data</div><div class="code_line">&nbsp;&nbsp;private final ByteBuffer buffer = ByteBuffer.allocate( 16384 );</div><div class="code_line">&nbsp;&nbsp;public static ByteBuffer buf ;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public Server( int port ) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;this.port = port;</div><div class="code_line">&nbsp;&nbsp; &nbsp;new Thread( this ).start();</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public void run() {</div><div class="code_line">&nbsp;&nbsp; &nbsp;try {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Instead of creating a ServerSocket,</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// create a ServerSocketChannel</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ServerSocketChannel ssc = ServerSocketChannel.open();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Set it to non-blocking, so we can use select</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ssc.configureBlocking( false );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Get the Socket connected to this channel, and bind it</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// to the listening port</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ServerSocket ss = ssc.socket();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;InetSocketAddress isa = new InetSocketAddress( port );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ss.bind( isa );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Create a new Selector for selecting</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Selector selector = Selector.open();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// Register the ServerSocketChannel, so we can</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;// listen for incoming connections</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;ssc.register( selector, SelectionKey.OP_ACCEPT );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;System.out.println( &quot;Listening on port &quot;+port );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;while (true) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// See if we&#39;ve had any activity -- either</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// an incoming connection, or incoming data on an</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// existing connection</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;int num = selector.select();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// If we don&#39;t have any activity, loop around and wait</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// again</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if (num == 0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// Get the keys corresponding to the activity</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// that has been detected, and process them</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// one by one</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Set keys = selector.selectedKeys();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Iterator it = keys.iterator();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;while (it.hasNext()) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Get a key representing one of bits of I/O</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// activity</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SelectionKey key = (SelectionKey)it.next();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// What kind of activity is it?</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if ((key.readyOps() &amp; SelectionKey.OP_ACCEPT) ==</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SelectionKey.OP_ACCEPT) {</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println( &quot;acc&quot; );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// It&#39;s an incoming connection.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Register this socket with the Selector</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// so we can listen for input on it</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Socket s = ss.accept();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println( &quot;Got connection from &quot;+s );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Make sure to make it non-blocking, so we can</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// use a selector on it.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SocketChannel sc = s.getChannel();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sc.configureBlocking( false );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Register it with the selector, for reading</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sc.register( selector, SelectionKey.OP_READ &nbsp;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} else if ((key.readyOps() &amp; SelectionKey.OP_READ ) ==</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SelectionKey.OP_READ ) {</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SocketChannel sc = null;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try {</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// It&#39;s incoming data on a connection, so</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// process it</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sc = (SocketChannel)key.channel();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;boolean ok = processInput( sc );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// If the connection is dead, then remove it</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// from the selector and close it</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (!ok) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;key.cancel();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Socket s = null;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s = sc.socket();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;s.close();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} catch( IOException ie ) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.err.println( &quot;Error closing socket &quot;+s+&quot;: &quot;+ie );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} catch( IOException ie ) {</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// On exception, remove this channel from the selector</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;key.cancel();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sc.close();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} catch( IOException ie2 ) { System.out.println( ie2 ); }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println( &quot;Closed &quot;+sc );</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// We remove the selected keys, because we&#39;ve dealt</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// with them.</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;keys.clear();</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;} catch( IOException ie ) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;System.err.println( ie );</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;// Do some cheesy encryption on the incoming data,</div><div class="code_line">&nbsp;&nbsp;// and send it back out</div><div class="code_line">&nbsp;&nbsp;private boolean processInput( SocketChannel sc ) throws IOException {</div><div class="code_line">&nbsp;&nbsp; &nbsp;buffer.clear();</div><div class="code_line">&nbsp;&nbsp; &nbsp;sc.read( buffer );</div><div class="code_line">&nbsp;&nbsp; &nbsp;buffer.flip();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// If no data, close the connection</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (buffer.limit()==0) {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;return false;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;sc.write( buffer );</div><div class="code_line">&nbsp;&nbsp; &nbsp;System.out.println( &quot;\n Processed &quot;+buffer.limit()+&quot; from &quot;+sc );</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return true;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;static public void main( String args[] ) throws Exception {</div><div class="code_line">&nbsp;&nbsp; &nbsp;int port = Integer.parseInt( args[0] );</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;new Server( port );</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
Пример при получении строки отсылает её назад. Не могу никак сообразить как зделать так чтобы отправить  стоку всем клиентам сразу или кому-то из них конкретно (что похоже на чат). Подскажите де что посмотреть. Или как сделать.<br>
Надо наверно отобрать те соединения которые готовые на запись и писать туда ???]]></description>
        <author>neznayka</author>
        <category>Java</category>
      </item>
	
      </channel>
      </rss>
	