Probleme mit Java Non Blocking Sockets (unreachable statement)
Stefan aus Biberach
- java
0 Slyh
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
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