📄 msnsocketchannel.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 + -