try {
socketChannel = SocketChannel.open();
//socketChannel.configureBlocking(false);
socketChannel.connect(new InetSocketAddress(Login.sHost, Login.iPort));
} catch (Exception e) {
socketChannel = null;
}
if (socketChannel != null) {
try {
while(!socketChannel.finishConnect()) {
}
System.out.println("connect");
InputStream inputStream = Channels.newInputStream(socketChannel);
inStream = new BufferedReader(new InputStreamReader(inputStream, sCharset));
Hier die Ausnahmemeldung:
Exception occurred during event dispatching:
java.nio.channels.IllegalBlockingModeException
at java.nio.channels.Channels.write(Unknown Source)
at java.nio.channels.Channels.access$000(Unknown Source)
at java.nio.channels.Channels$1.write(Unknown Source)
at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(Unknown Source)
at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(Unknown Source)
at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(Unknown Source)
at sun.nio.cs.StreamEncoder.flush(Unknown Source)
at java.io.OutputStreamWriter.flush(Unknown Source)
at java.io.PrintWriter.flush(Unknown Source)
Eingelesen werden die Daten in einem Thread:
while(!interrupted() && (line = inStream.readLine()) != null) {
Der Output ist folgendermaßen zusammengestellt:
OutputStream outputStream = Channels.newOutputStream(socketChannel);
outStream = new PrintWriter(new OutputStreamWriter(outputStream, sCharset));
outStream.write("bla" + crlf);
outStream.flush();
Wenn ich aber den Blockiermodus nicht angebe und dann versuche,
Daten zu senden, hängt sich die gesamte Anwendung auf, keine Ahnung, wieso.
Die Client-Server-Kommunikation funktioniert eigentlich ganz gut über einen
java.io.Socket. Da aber die Schleife
while(!interrupted() && (line = inStream.readLine()) != null) {
nicht sofort verlassen wird, wenn interrupt() aufgerufen wird, möchte ich
java.io.Socket durch java.nio.SocketChannel austauschen, damit es eben nicht
blockiert.
Orientiert habe ich mich an folgender Webseite:
http://javaalmanac.com/egs/java.nio/NbClientSocket.html
Irgendjemand da, der meine (Denk)-Blockierung lösen kann? :-)
Gruß,
Thomas Barth