本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点
网络通信基础
socket
socket是应用层与TCP/IP协议族通信的中间软件抽象,操作系统把传输层一下的内容都包装了,应用层只需要用socket即可完成网络请求
Tcp是基于流;UDP是基于DatagramPacket数据报;socket可以利用DatagramPacket进行UDP通信
网络请求3部分
- 连接(客户端和服务端)
- 读网络数据
- 写网络数据
BIO、NIO、AIO
- BIO:阻塞的IO
- NIO(IO多路复用):一个线程同时管理多个和客户端的连接,一般应用线程数量限制为1024个(系统限制,总共65535,要除去系统使用)
- AIO(异步IO):目前只有Windows上完全实现
BIO网络编程
服务端
private static ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2);
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress(10001));
System.out.println("start server ....");
try {
while (true){
executorService.execute(new ServerTask(serverSocket.accept()));
}
}finally {
serverSocket.close();
}
}
private static class ServerTask implements Runnable{
pr