Stefan aus Biberach: Probleme mit Java Non Blocking Sockets (unreachable statement)

Hallo,

ich programmiere gerade für ein paar meiner Programme eine kleine Java - Datei in der ich Non Blocking Sockets kapseln möchte. Nun, sagt der compiler mir beim kompilieren:

"C:\Phoenix\DRAGON\DragonConsole\CKernel\CKernel.java:91: unreachable statement Set readyKeys = selector.selectedKeys();"

nun ich denke ein Quellcode sagt mehr als tausend Worte *lol*

package CKernel;

import java.net.*;
import java.io.*;
import java.util.*;
import java.nio.charset.*;
import java.nio.channels.*;
import java.nio.*;

public class CKernel
{
 SocketChannel sc;
 Selector selector;
 CharsetEncoder encoder;
 Charset charset;
 String inData;

final static int MAX_LAENGE = 1024;

public void CreateSocket(String ServerIP, int port)
 {
  try {
   // First of all create the socket channel
   sc = SocketChannel.open();

// i need a non-blocking socket
   sc.configureBlocking(false);

// the selector VERY IMPORTANT
   selector = Selector.open();

// Socket Addy
   InetSocketAddress addy = new InetSocketAddress
    (ServerIP, port);

// Connect 2 Server
   sc.connect(addy);

while(!sc.finishConnect())
   {
    // this runs until the kernel has connected to the Server

}

// Now we have got a connection but what's with the Charset
   // NOT INTERNATIONAL
   charset = Charset.forName("ISO-8859-1"); //GERMAN
   encoder = charset.newEncoder();

sc.register(selector, SelectionKey.OP_READ|SelectionKey.OP_WRITE);

} catch(IOException e) {
   // IOException bla la
  }
 }

public void Out(String msg)
 {
  System.out.println(msg);
 }

public void CloseSocket()
 {
  try {
   sc.close();
  } catch(IOException e) {
   // bla bla
  } catch(NullPointerException e) {
   // bla bla
  }
 }

public String SocketEmpfange()
 {
  try {
   while(true){

int n = selector.select();

if(n==0)
    {
     continue;
    }
   }

Set readyKeys = selector.selectedKeys();
   Iterator it = readyKeys.iterator();

while(it.hasNext())
   {
    SelectionKey selKey = (SelectionKey)it.next();

if(selKey.isReadable())
    {
     // time to setup read
     ByteBuffer incomingData =
      ByteBuffer.allocate(MAX_LAENGE);
     incomingData.clear();

int count;

while((count = sc.read(incomingData)) > 0)
     {
      // reading the data

}

int pos = incomingData.position();

incomingData.flip();
     CharBuffer content = charset.decode(incomingData);

inData = content.toString();

break;
    }
   }
  } catch(IOException e){
   // bla bla
  }

return inData;
 }

public void SocketSend()
 {

}
}

Also ich muss ehrlich gestehen das mir bis jetzt in keinem Forum geholfen werden konnte. Ich hoffe das es hier klappt *zitter*

Also vieeelen Dank für eure Bemühungen im Voraus

  1. Hallo,

    "C:\Phoenix\DRAGON\DragonConsole\CKernel\CKernel.java:91: unreachable statement Set readyKeys = selector.selectedKeys();"

    Die genannte Zeile kann nie ausgeführt werden, weil dein Programmfluß
    dies nicht zuläßt.

    public String SocketEmpfange()
    {
      try {
       while(true){

    Endlosschleife.

    int n = selector.select();

    if(n==0)
        {
         continue;
        }

    Keine Abbruchbedingung (break) irgendwo.

    }

    Damit wird das Programm nie bis hierher kommen.
    Und genau das sagt dir der Compiler.

    Set readyKeys = selector.selectedKeys();
       Iterator it = readyKeys.iterator();

    [...]

    Gruß
    Slyh