本文整理匯總了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();
}
}
}