當前位置: 首頁>>代碼示例>>Java>>正文


Java SocketChannel.isConnectionPending方法代碼示例

本文整理匯總了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);
            }
        }
    }
}
 
開發者ID:laidu,項目名稱:java-learn,代碼行數:32,代碼來源:NioClient.java

示例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;
	}
}
 
開發者ID:huang-up,項目名稱:mycat-src-1.6.1-RELEASE,代碼行數:13,代碼來源:NIOConnector.java

示例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);
}
 
開發者ID:zhangboqing,項目名稱:multithread,代碼行數:13,代碼來源:NIOEchoClient.java

示例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;
	}
}
 
開發者ID:variflight,項目名稱:feeyo-redisproxy,代碼行數:10,代碼來源:NIOConnector.java

示例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;
    }
}
 
開發者ID:actiontech,項目名稱:dble,代碼行數:12,代碼來源:NIOConnector.java

示例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();
		}
	}
}
 
開發者ID:Esri,項目名稱:defense-solutions-proofs-of-concept,代碼行數:32,代碼來源:ConnectionManager.java


注:本文中的java.nio.channels.SocketChannel.isConnectionPending方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。