Java网络编程安全教程 清华大学出版社 ISBN-9787302482833
仅供参考, 自建索引, 以备后查
https://docs.oracle.com/javase/6/docs/api/index.html
https://docs.oracle.com/javase/7/docs/api/index.html
https://docs.oracle.com/javase/8/docs/api/index.html
=================================================================
一: 简介概述 IO流
java.io.* java.nio.* java.nio.channels.*
InputStream OutputStream 字节流
Reader Writer 字符流
InputStreamReader OutputStreamWriter 字节流与字符流转换
FileInputStream/FileOutputStream 二进制流
BufferedInputStream/BufferedOutputStream 二进制缓冲流
DataInputStream/DataOutputStream 数据流
HTTP/SMTP/POP3/FTP/Telnet/DHCP 应用层+表示层+会话层= *应用层
TCP/IP *传输层 + *网络层
MAC地址 数据链路层+物理层= *网络接口层
SOCKET是操作系统开放给程序员的网络编程接口
传输层以下协议的技术实现是由操作系统完成的,即网络服务由操作系统提供
SOCK_STREAM流式套接字 SOCK_DGRAM数据报套接字 SOCK_RAW原始套接字
通信端口 0~65535
线程: 新生new 等待系统分配CPU执行start 执行run 阻塞wait/sleep/join/yield 消亡throw/interrept/stop
ServerSocket/Socket DatagramPacket/DatagramSocket
=================================================================
二: ServerSocket多线程与Client通信
ServerSocket ss = new ServerSocket();
ss.bind(..);
while (true) {
Socket client = ss.accept();
new ClientSocketHandlerThread(client).start();
}
Class ClientSocketHandlerThread implements Runnable {
ClientSocketHandlerThread(Socket s) {
// TODO
}
public void run() {
// TODO
}
}
SwingWorker<T,V> implements Runnable, Future<T>, RunnableFuture<T>
doInBackground() publish() process() done() get()
=================================================================
三: ServerSocket多线程与Client通信+线程池
最佳线程池大小 = Runtime.getRuntime().availableProcessors() * 2 + 1
int MAX = Runtime.getRuntime().availableProcessors() * 2 + 1;
ExecutorService fixedPool = Executors.newFixThreadPool(MAX);
ServerSocket ss = new ServerSocket();
ss.bind(..);
while (true) {
Socket client = ss.accept();
/// 在线程池中执行
fixedPool.exec( new ClientSocketHandlerThread(client) );
}
fixedPool.shutdown(); /// 等待线程池中所有线程执行完毕,此时已经不能再向线程池添加线程
if ( ! fixedPoo.awaitTermination(60, TimeUnit.SECONDS) ) {
fixedPool.shutdownNow(); /// 如果60S还没结束则强制关闭
}
/ 下面是API文档的示例
The following method shuts down an ExecutorService in two phases,
first by calling shutdown to reject incoming tasks, and then calling
shutdownNow, if necessary, to cancel any lingering tasks:
void shutdownAndAwaitTermination(ExecutorService pool) {
pool.shutdown(); // Disable new tasks from being submitted
try {
// Wait a while for existing tasks to terminate
if (!pool.awaitTermination(60, TimeUnit.SECONDS)) {
pool.shutdownNow(); // Cancel currently executing tasks
// Wait a while for tasks to respond to being cancelled
if (!pool.awaitTermination(60, TimeUnit.SECONDS))
System.err.println("Pool did not terminate");
}
} catch (InterruptedException ie) {
// (Re-)Cancel if current thread also interrupted
pool.shutdownNow();
// Preserve interrupt status
Thread.currentThread().interrupt();
}
}
Executor
void execute(..) 无参数返回
ExecutorService
Future<?> submit(..) 返回Future对象
T invokeAny(Collection<?>...) 执行一组任务,返回其中一个结果,通常情况下是最先执行完毕的那个
List<Future<?>> invokeAll(Collection<?>...) 返回所有任务的Future对象
更多线程、线程池参考 Java并发编程从入门到精通
=================================================================
四: 非阻塞I/ O NIO:(1)New I/O (2)Non-Blocking I/O
ServerSocket/Socket ServerSocketChannel/SocketChannel
DatagramSocket/DatagramPacket DatagramChannel
Buffer ByteBuffer/CharBuffer/DoubleBuffer/FloatBuffer/IntBuffer/LongBuffer/ShortBuffer
allocate() [ˈæləkeɪt] read() write() clear()