#1传统IO
#2 传统IO有两种方式:
1、单线程方式
这种方式的io是阻塞的, 服务器的serverSocket只能为一个客户端socket服务,不能接收到新的客户端socket连接
、、、
public static void main(String[] args) {
try {
// 开启一个serverSocket
System.out.println("开启一个serverSocket");
ServerSocket serverSocket = new ServerSocket(10101);
while(true){
Socket accept = serverSocket.accept(); // 阻塞
System.out.println("受到一个连接");
handle(accept);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void handle(Socket socket){
byte[] bytes = new byte[1024];
try {
InputStream inputStream= socket.getInputStream(); // 输入流inputStream
while (true) {
int read = inputStream.read(bytes); // 阻塞
if (read != -1) {
String s = new String(bytes, 0, read);
System.out.println(s);
}
else {
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
try {
System.out.println("socket关闭");
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
、、、
2、多线程方式
多线程方式为每一个客户端socket创建一个单独的线程来处理,所以这种方式客户为多个客户端服务。
但是这种方式系统资源开销很大,不能有效的利用每个线程资源, 当客户端连接数量多起来的时,系统由于线程过多
会造成无法正常运行
```
public static void main(String[] args) {
// 创建线程池
ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
try {
// 开启一个serverSocket
System.out.println("开启一个serverSocket");
ServerSocket serverSocket = new ServerSocket(10101);
while(true){
Socket accept = serverSocket.accept(); // 阻塞
System.out.println("受到一个连接");
// 为每个客户端单独创建一个线程来处理
newCachedThreadPool.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
handle(accept);
}
});
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void handle(Socket socket){
byte[] bytes = new byte[1024];
try {
InputStream inputStream= socket.getInputStream(); // 输入流inputStream
while (true) {
int read = inputStream.read(bytes); // 阻塞
if (read != -1) {
String s = new String(bytes, 0, read);
System.out.println(s);
}
else {
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
try {
System.out.println("socket关闭");
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
```