本文整理汇总了Java中java.nio.channels.SocketChannel.isConnectionPending方法的典型用法代码示例。如果您正苦于以下问题:Java SocketChannel.isConnectionPending方法的具体用法?Java SocketChannel.isConnectionPending怎么用?Java SocketChannel.isConnectionPending使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类java.nio.channels.SocketChannel
的用法示例。
在下文中一共展示了SocketChannel.isConnectionPending方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: listen
import java.nio.channels.SocketChannel; //导入方法依赖的package包/类
/**
* * // 采用轮询的方式监听selector上是否有需要处理的事件,如果有,则进行处理 * @throws // IOException
* @throws Exception
*/
@SuppressWarnings("unchecked")
public void listen() throws Exception { // 轮询访问selector
while (true) {
// 选择一组可以进行I/O操作的事件,放在selector中,客户端的该方法不会阻塞,
// 这里和服务端的方法不一样,查看api注释可以知道,当至少一个通道被选中时,
// selector的wakeup方法被调用,方法返回,而对于客户端来说,通道一直是被选中的
selector.select(); // 获得selector中选中的项的迭代器
Iterator ite = this.selector.selectedKeys().iterator();
while (ite.hasNext()) {
SelectionKey key = (SelectionKey) ite.next(); // 删除已选的key,以防重复处理
ite.remove(); // 连接事件发生
if (key.isConnectable()) {
SocketChannel channel = (SocketChannel) key.channel(); // 如果正在连接,则完成连接
if (channel.isConnectionPending()) {
channel.finishConnect();
} // 设置成非阻塞
channel.configureBlocking(false);
// 在这里可以给服务端发送信息哦
channel.write(ByteBuffer.wrap(new String("hello server!").getBytes()));
// 在和服务端连接成功之后,为了可以接收到服务端的信息,需要给通道设置读的权限。
channel.register(this.selector, SelectionKey.OP_READ); // 获得了可读的事件
} else if (key.isReadable()) {
read(key);
}
}
}
}
示例2: finishConnect
import java.nio.channels.SocketChannel; //导入方法依赖的package包/类
private boolean finishConnect(AbstractConnection c, SocketChannel channel)
throws IOException {
if (channel.isConnectionPending()) {
// 阻塞或非阻塞
channel.finishConnect();
c.setLocalPort(channel.socket().getLocalPort());
return true;
} else {
return false;
}
}
示例3: connect
import java.nio.channels.SocketChannel; //导入方法依赖的package包/类
public void connect(SelectionKey key) throws IOException {
SocketChannel channel = (SocketChannel) key.channel();
// 首先判断是否连接已经建立,如果没有,则调用finishConnect()完成连接
if (channel.isConnectionPending()) {
channel.finishConnect();
}
channel.configureBlocking(false);
//建立连接后,向Channel写入数据,并同时注册读事件为感兴趣的事件
channel.write(ByteBuffer.wrap(new String("hello server!\r\n").getBytes()));
channel.register(this.selector, SelectionKey.OP_READ);
}
示例4: finishConnect
import java.nio.channels.SocketChannel; //导入方法依赖的package包/类
private boolean finishConnect(Connection c, SocketChannel channel) throws IOException {
if (channel.isConnectionPending()) {
channel.finishConnect();
c.setLocalPort(channel.socket().getLocalPort());
return true;
} else {
return false;
}
}
示例5: finishConnect
import java.nio.channels.SocketChannel; //导入方法依赖的package包/类
private boolean finishConnect(AbstractConnection c, SocketChannel channel)
throws IOException {
if (channel.isConnectionPending()) {
channel.finishConnect();
c.setLocalPort(channel.socket().getLocalPort());
return true;
} else {
return false;
}
}
示例6: finishConnection
import java.nio.channels.SocketChannel; //导入方法依赖的package包/类
/**
* Attempts to finish a connection
* @param key
*/
void finishConnection(SelectionKey key)
{
SocketChannel chan = (SocketChannel) key.channel();
Session session = socChanMap.get(chan);
if (chan.isConnectionPending())
{
try
{
if (session.getConnection().finishConnect())
{
session.halfConnected();
session.login();
}
else
{
session.connecting();
}
}
catch (IOException e)
{
session.markForRemoval();
key.cancel();
e.printStackTrace();
}
}
}