Socket
一般分为 ServerSocket
和 Socket
两类,前者用于服务端,可以通过 accept
方法监听请求然后处理并返回 Socket
;后者用于完成具体数据传输,客户端可直接使用 Socket
发起请求并传输数据。
ServerSocket
使用
try {
ServerSocket serverSocket = new ServerSocket(6666);
// The method blocks until a connection is made.
Socket socket = serverSocket.accept();// accept 是阻塞方法,收到请求后程序才会继续进行
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String data = bufferedReader.readLine();
System.out.println("get data:" + data);
socket.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write("hello," + data);
bufferedWriter.close();
bufferedReader.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
Socket
使用
try {
Socket socket = new Socket("127.0.0.1", 5200);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter write = new PrintWriter(socket.getOutputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline = br.readLine();// 从系统标准输入读入一字符串
while (!readline.equals("end")) {
write.println(readline);
write.flush();
System.out.println("Client:" + readline);
System.out.println("Server:" + in.readLine());
readline = br.readLine(); // 从系统标准输入读入一字符串
} // 继续循环
write.close();
in.close();
socket.close();
} catch (Exception e) {
System.out.println("can not listen to:" + e);// 出错,打印出错信息
}
NIO Socket
jdk1.4 开始增加 NIO
接口模式,对比旧接口的阻塞模式底层采用新的处理方式极大地增加了 IO 的效率。需要理解三个概念:Buffer
,Channel
,Selector
。