Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[nio] IllegalBlockingMode

0 views
Skip to first unread message

Thomas Barth

unread,
May 10, 2004, 11:04:45 AM5/10/04
to
Hallo,
die Verbindung zu einem Server funktioniert und das Empfangen von Daten
ebenfalls, wenn ich den Blockiermodus nicht angebe! Anderenfalls
erhalte ich die Ausnahme "IllegalBlockingMode".

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


0 new messages