BIO 介绍
BIO 编程方式通常是在 JDK1.4 版本之前常用的编程方式。编程实现过程为:首先在服务端启动一个 ServerSocket 来监听网络请求,客户端启动 Socket 发起网络请求,默认情况下 ServerSocket 回建立一个线程来处理此请求,如果服务端没有线程可用,客户端则会阻塞等待或遭到拒绝。同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
BIO 图示
代码实现
服务端
public class Server {
public static void main(String[] args) throws IOException {
// 1.定义一个serverSocket,并定义端口是 9999
ServerSocket ss = new ServerSocket(9999);
while(true){
// 2.监听k客户端的socket请求
Socket socket = ss.accept();
new SocketThread(socket).start();
}
}
}
处理实现
public class SocketThread extends Thread{
private Socket socket;
public SocketThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
// 1.从客户端传来的socket里面获取到流
InputStream is = socket.getInputStream();
// 2.将字节输入流包装成一个缓冲字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String msg;
while((msg = br.readLine())!=null){
System.out.println("服务端接受到信息:"+msg);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端
public class Client {
public static void main(String[] args) throws IOException {
// 1.创建socket将对象请求服务端的链接
Socket socket = new Socket("127.0.0.1",9999);
// 2.从socket对象中获取一个字符输出流
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
Scanner scanner = new Scanner(System.in);
while(true){
System.out.print("请说:");
String msg = scanner.nextLine();
ps.println(msg);
// 推送发送内容给服务端
ps.flush();
}
}
}
标签:总结,BIO,Java,socket,线程,new,public,服务端,Socket
From: https://www.cnblogs.com/feiqiangsheng/p/16632940.html