package com.channel.socket.tcp;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocketChannel sschannel;
sschannel = ServerSocketChannel.open();
sschannel.configureBlocking(false);
ServerSocket ss = sschannel.socket();
ss.bind(new InetSocketAddress(8888));
Selector selector = Selector.open();
sschannel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
System.out.println("***1***");
int nKeys = selector.select(1000);
if (nKeys > 0) {
for (SelectionKey key : selector.selectedKeys()) {
if (key.isAcceptable()) {
System.out.println("***2***");
ServerSocketChannel server = (ServerSocketChannel) key
.channel();
SocketChannel sc = server.accept();
if (sc == null) {
continue;
}
sc.configureBlocking(false);
sc.register(selector, SelectionKey.OP_READ);
} else if (key.isReadable()) {
System.out.println("***3***");
ByteBuffer buffer = ByteBuffer.allocate(1024);
SocketChannel sc = (SocketChannel) key.channel();
int readBytes = 0;
String message = null;
try {
int ret;
try {
while ((ret = sc.read(buffer)) > 0) {
readBytes += ret;
}
} catch (Exception e) {
readBytes = 0;
} finally {
buffer.flip();
}
if (readBytes > 0) {
message = Charset.forName("UTF-8")
.decode(buffer).toString();
buffer = null;
}
} finally {
if (buffer != null)
buffer.clear();
}
if (readBytes > 0) {
System.out
.println("message from client:" + message);
if ("quit".equalsIgnoreCase(message.trim())) {
sc.close();
selector.close();
System.out.println("Server has been shutdown!");
System.exit(0);
}
String outMessage = "server response:" + message;
sc.write(Charset.forName("UTF-8")
.encode(outMessage));
}
}
}
selector.selectedKeys().clear();
}
}
}
}
tcp.rar_SocketChannel_SocketChannel HTTPS_java socketchannel_非阻
版权申诉
59 浏览量
2022-09-20
20:00:16
上传
评论
收藏 2KB RAR 举报
APei
- 粉丝: 63
- 资源: 1万+
最新资源
- 解决未在远程桌面会话中捕获到鼠标,vmguest.iso软件分享给大家
- JSP+SQL基于WEB的开放性实验管理系统设计与实现(源代码+论文+开题报告+中英文献+答辩PPT).rar
- log4net配置文件!!!!!!!!!!!!!!!!!
- 河南统计面板数据集(2010-2022年).xlsx
- OrcaleDBHelper帮助类!!!!!!!!!!!!
- log4net帮助类,用来写日志!!!!!!!!!!!!!
- Windows10时间同步源
- 信呼OA系统2.1.7版源码
- 3122080306 邹子轩 实验报告二.docx
- 基于STM32 NUCLEO板设计彩色LED照明灯(纯cubeMX开发)(大赛作品,文档完整,可直接运行)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈