/
Forside
/
Teknologi
/
Udvikling
/
Java
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
Java
#
Navn
Point
1
molokyle
3688
2
Klaudi
855
3
strarup
740
4
Forvirret
660
5
gøgeungen
500
6
Teil
373
7
Stouenberg
360
8
vnc
360
9
pmbruun
341
10
mccracken
320
Forsøg på at bruge selector
Fra :
Jacob Jensen
Dato :
22-10-05 12:14
I forlængelse af tråden "Bufferedreader.ready()"
Nu har jeg forsøgt at bruge selectors til at lytte på hvilke sockets der er
klar til at blive læst. Jeg gør følgende:
Først har jeg en ServerSocketChannel med navnet "channel" og udfører
følgende efter at have sat den til non-blocking:
SocketChannel socketChannel = channel.accept();
Hvis socketChannel er forskellig fra null gør jeg følgende:
socketChannel.configureBlocking(false);
socketChannel.register(sel, SelectionKey.OP_READ);
Hvis jeg ikke sætter blocking mode til false, giver "register" in
illegalBlockingModeException. Det forstår jeg ikke helt hvorfor. Nu opretter
jeg en ny instans af en klasse som skal varetage denne socketChannel's
socket (ikke i en ny tråd).
Lidt efter udfører jeg følgende:
Set keySet = null;
try
{
sel.selectNow();
keySet = sel.selectedKeys();
}
catch(Exception e)
{
System.out.println(e);
return false;
}
if(keySet.contains(clients[i].socketChannel.keyFor(sel)))
{
String command = clients[i].getCommand();
...
....hvor clients[i] er den instans jeg omtalte før og socketChannel er den
der blev returneret ved "accept()". Alt dette virker fint, men inde i
getCommand-funktionen går det galt. Efter en...
in = new BufferedReader(new
InputStreamReader(socketChannel.socket().getInputStream()));
....giver følgende en illegalBlockingModeException:
line = in.readLine();
Hvad gør jeg galt? Hvorfor skal socketChannel være i non-blocking mode når
jeg kalder "register()"?Jeg kan ikke finde noget der kan hjælpe mig på
java.sun.dom/docs
Jacob
Jacob Jensen (
23-10-2005
)
Kommentar
Fra :
Jacob Jensen
Dato :
23-10-05 16:33
Fejlen er fundet.
Jeg kan ikke lave read på en InputStream fra en socket som haren tilknyttet
Channel, fordi socket'en delegerer al sin IO til kanalen. Tak for hjælpen.
Jacob
Søg
Alle emner
Teknologi
Udvikling
Java
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177549
Tips :
31968
Nyheder :
719565
Indlæg :
6408820
Brugere :
218887
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.