在继续记录NIO的学习之前,我觉得有必要先复习一下IO相关的知识。今天就说一下网络套接字Socket
废话不多说,先上代码,这里实现一个最简单的Echo功能,客户端发送一条消息服务端直接进行返回。
服务端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @Description:
* @author:xyq
* @date:2018年6月6日
*/
public class Server {
ServerSocket ss = null;
public static void main(String[] args) {
new Server().startServer();
}
public void startServer() {
Socket socket = null;
try {
ss = new ServerSocket(1234); // 监听1234端口
while (true) {
socket = ss.accept(); // 堵塞式接受Socket
new ServerThread(socket).start(); // 放入线程进行处理
}
} catch (IOException e) {
e.printStackTrace();
}
}
class ServerThread extends Thread {
Socket socket = null;
public ServerThread(Socket socket){
this.socket = socket;
}
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
BufferedReader br = null;
PrintWriter pw = null;
try {
pw = new PrintWriter(socket.getOutputStream());
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true) {
String line = br.readLine();
System.out.println("从客户端来的信息:" + line);
pw.println("你好,服务器已经收到您的信息!'" + line + "'\n");
pw.flush();
System.out.println("已经返回给客户端!");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
pw.close();
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
客户端:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* @Description:
* @author:xyq
* @date:2018年6月6日
*/
public class Client {
public static void main(String[] args) {
new Client().startClient();
}
public void startClient() {
Socket socket = null;
BufferedReader br = null;
PrintWriter pw = null;
try {
socket = new Socket("localhost", 1234);
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw = new PrintWriter(socket.getOutputStream());
String get = "客户端" + Math.random() * 1000;
while (true) {
if (get != null && get.length() > 0) {
pw.println(get); // 写入缓冲流
pw.flush(); // 刷新缓冲
}
if (br != null) {
String line = br.readLine();
System.out.println("从服务器来的信息:" + line);
}
Thread.sleep(2000);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}