⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msnsocketchannel.java

📁 JAVA解析MSNP15协议
💻 JAVA
字号:
package jm.framework.msn.net;

import java.io.IOException;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.NotYetConnectedException;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;

/**
 * 使用通道连接服务器
 * 该通道连接后可以使用System.inheritedChannel()方法来获得通道实体
 * 梦界家园MSNP15
 * @author ISHome
 * @since 0.5.0.1
 * @version 0.1
 */
public class MSNSocketChannel {
	
	/** 服务器连接 */
	private SocketChannel s = null;
	
	//private Charset charset=Charset.forName("UTF-8");//创建UTF-8字符集

	/**
	 * 建立新的服务器连接通道
	 * 
	 * @param remote 与新通道连接的远程地址
	 * @throws IOException
	 */
	public MSNSocketChannel(SocketAddress remote) throws IOException {
		// 打开套接字通道并将其连接到远程地址。
		s = SocketChannel.open(remote);
	}

	/**
	 * 向给定的选择器注册此通道,返回一个选择键。 
	 * @param sel 要向其注册此通道的选择器
	 * @param ops 所得键的可用操作集 
	 * @return 表示此通道向给定选择器注册的键 
	 * @throws ClosedChannelException
	 */
	public final SelectionKey register(Selector sel,int ops) throws ClosedChannelException{
		return s.register(sel, ops);
	}
	
	/**
	 * 将字节序列从此通道读入给定的缓冲区。
	 * 
	 * @param dsts 要向其中传输字节的缓冲区
	 * @return 读取的字节数,可能为零,如果该通道已到达流的末尾,则返回 -1
	 * @throws  NotYetConnectedException - 如果尚未连接此通道 
	 * 			ClosedChannelException - 如果此通道已关闭
	 *          AsynchronousCloseException - 如果正在进行读取操作时另一个线程关闭了此通道
	 *          ClosedByInterruptException - 如果正在进行读取操作时另一个线程中断了当前线程,因此关闭了该通道并将当前线程设置为中断状态 
	 *          IOException - 如果发生其他 I/O 错误
	 */
	public final long read(ByteBuffer... dsts) throws IOException {
		return s.read(dsts);
	}

	/**
	 * 将字节序列从给定的缓冲区写入此通道。
	 * @param srcs 要传输字节的缓冲区 
	 * @return 写入的字节数,可能为零
	 * @throws  NotYetConnectedException - 如果尚未连接此通道 
	 * 			ClosedChannelException - 如果此通道已关闭
	 *          AsynchronousCloseException - 如果正在进行读取操作时另一个线程关闭了此通道
	 *          ClosedByInterruptException - 如果正在进行读取操作时另一个线程中断了当前线程,因此关闭了该通道并将当前线程设置为中断状态 
	 *          IOException - 如果发生其他 I/O 错误
	 */
	public final long write(ByteBuffer... srcs) throws IOException {
		return s.write(srcs);
	}

	/**
	 * 关闭此通道。
	 * @throws IOException  - 如果发生 I/O 错误
	 */
	public void close() throws IOException{
		s.close();
	}

	/**
	 * 判断是否已连接此通道的网络套接字。
	 * @return 当且仅当已连接此通道的网络套接字时才返回 true
	 */
	public boolean isOpen() {
		return s.isConnected();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -