JDK1.4非阻塞套接字API概述 - 编程入门网
onnection to host port 8000
client.connect(new java.net.InetSocketAddress(host,8000));
// Create selector
Selector selector = Selector.open();
// Record to selector (OP_CONNECT type)
SelectionKey clientKey = client.register(selector, SelectionKey.OP_CONNECT);
// Waiting for the connection
while (selector.select(500)> 0) {
// Get keys
Set keys = selector.selectedKeys();
Iterator i = keys.iterator();
// For each key...
while (i.hasNext()) {
SelectionKey key = (SelectionKey)i.next();
// Remove the current key
i.remove();
// Get the socket channel held by the key
SocketChannel channel = (SocketChannel)key.channel();
// Attempt a connection
if (key.isConnectable()) {
// Connection OK
System.out.println("Server Found");
// Close pendent connections
if (channel.isConnectionPending())
channel.finishConnect();
// Write continuously on the buffer
ByteBuffer buffer = null;
for (;;) {
buffer =
ByteBuffer.wrap(
new String(" Client " + id + " ").getBytes());
channel.write(buffer);
buffer.clear();
}
}
}
}
也许,客户端应用程序的结构让你回忆起服务器端应用程序的结构。然而,这里也有许多不同的地方。套接字通道使用OP_CONNECT选项连接到选择器上,意思是当服务器接受连接时选择器将不得不通知客户端,这个循环不是无穷的。While循环的条件是: while (selector.select(500)> 0) 意思是客户端尝试连接,最大时长是500毫秒;如果服务器端没有应答,selete方法将返回0,因为在通道上的服务器没有激活。在循环里,服务器端检测关键字是否可连接。在这个例子中,如果有一些不确定的连接,客户端就关闭那些不确定的连接,然后写入字符串“Client”后面接着从命令行参数中带来的变量ID。 结论 新的Java1.4 I/O体系是实现快速,灵活和可升级的Java应用程序的重要的一大步。看完这篇文章,依靠非阻隔套接字技术你可以写一个基于非阻隔套接字的应用程序而不用手工来处理多线程。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |