最原始的版本
客户端服务端BIOServer
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
//最原始的版本
public class BIOServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8080); //Socket 插座的意思
System.out.println("服务器启动成功");
while (!serverSocket.isClosed()) { //isClosed 是否是关闭的
Socket request = serverSocket.accept();// 阻塞 accept(吸收)方法: 如何没有新的连接过来 就会一直等待
System.out.println("收到新连接 : " + request.toString());
try {
// 接收数据、打印 读取数据
InputStream inputStream = request.getInputStream(); // net + i/o
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
String msg;
while ((msg = reader.readLine()) != null) { // 没有数据,阻塞
if (msg.length() == 0) {
break;
}
System.out.println(msg);
}
System.out.println("收到数据,来自:"+ request.toString());
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
request.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
serverSocket.close();
}
}
结果:
服务器取得成功
阻塞提示:
客户端
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.Charset;
import java.util.Scanner;
public class BIOClient {
private static Charset charset = Charset.forName("UTF-8");
public static void main(String[] args) throws Exception {
Socket s = new Socket("localhost", 8080); //直接new (插孔)对象(服务端的host ,post)
//往外发数据
OutputStream out = s.getOutputStream();
//控制台写入发给服务器
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
String msg = scanner.nextLine();
out.write(msg.getBytes(charset)); // 阻塞,写完成才会 返回
scanner.close();
s.close();
}
}
请输入:
123
Process finished with exit code 0[这行是蓝色的 ,我输入了123]
在回头看服务器