Java Reference
In-Depth Information
channel
.
register
(
selector
,
SelectionKey
.
OP_READ
|
SelectionKey
.
OP_WRITE
);
ByteBuffer
buffer
=
ByteBuffer
.
allocate
(
4
);
int
n
=
0
;
int
numbersRead
=
0
;
while
(
true
)
{
if
(
numbersRead
==
LIMIT
)
break
;
// wait one minute for a connection
selector
.
select
(
60000
);
Set
<
SelectionKey
>
readyKeys
=
selector
.
selectedKeys
();
if
(
readyKeys
.
isEmpty
()
&&
n
==
LIMIT
)
{
// All packets have been written and it doesn't look like any
// more are will arrive from the network
break
;
}
else
{
Iterator
<
SelectionKey
>
iterator
=
readyKeys
.
iterator
();
while
(
iterator
.
hasNext
())
{
SelectionKey
key
=
(
SelectionKey
)
iterator
.
next
();
iterator
.
remove
();
if
(
key
.
isReadable
())
{
buffer
.
clear
();
channel
.
read
(
buffer
);
buffer
.
flip
();
int
echo
=
buffer
.
getInt
();
System
.
out
.
println
(
"Read: "
+
echo
);
numbersRead
++;
}
if
(
key
.
isWritable
())
{
buffer
.
clear
();
buffer
.
putInt
(
n
);
buffer
.
flip
();
channel
.
write
(
buffer
);
System
.
out
.
println
(
"Wrote: "
+
n
);
n
++;
if
(
n
==
LIMIT
)
{
// All packets have been written; switch to read-only mode
key
.
interestOps
(
SelectionKey
.
OP_READ
);
}
}
}
}
}
System
.
out
.
println
(
"Echoed "
+
numbersRead
+
" out of "
+
LIMIT
+
" sent"
);
System
.
out
.
println
(
"Success rate: "
+
100.0
*
numbersRead
/
LIMIT
+
"%"
);
}
catch
(
IOException
ex
)
{
System
.
err
.
println
(
ex
);
}
}
}