public class SocketTCP03Server {
public static void main(String[] args) throws IOException {
// 在本机监听 9999 端口, 等待发送端建立连接, 前提是保证没有其他服务在监听 9999 端口
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("服务端, 在 9999 端口进行监听, 等待连接中.... ");
// 当没有客户端连接此端口时会发生阻塞, 直到成功连接才会往下执行, 返回一个 Socket 对象
Socket socket = serverSocket.accept();
System.out.println("服务端 Socket = " + socket.getClass());
// 通过 socket 获得输入流
InputStream inputStream = socket.getInputStream();
// 读取输入流里的信息, 转换为字符流
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
// 读数据并输出
String s = br.readLine();
System.out.println(s);
// byte[] buffer = new byte[1024];
// int readLen;
// while((readLen = inputStream.read(buffer)) != -1) {
// System.out.println(new String(buffer,0,readLen));
// }
// 设置结束标记
socket.shutdownInput();
// 通过 socket 获得输出流, 转换成字符流
OutputStream outputStream = socket.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
bw.write("copy that 字符流");
bw.newLine();
bw.flush();
// 发送信息
// outputStream.write("hello, copy that".getBytes(StandardCharsets.UTF_8));
// 关闭流和相关资源
bw.close(); // 后打开的先关闭
br.close();
socket.close();
serverSocket.close();
}
}
public class SocketTCP03Client {
public static void main(String[] args) throws IOException {
// 连接服务器端, 连接本机 IP 的 9999 端口
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("客户端 socket = " + socket.getClass());
// 得到和 socket 对象关联的输出流对象
OutputStream outputStream = socket.getOutputStream();
// 通过该输出流写入数据到通中
// outputStream.write("hello, server".getBytes(StandardCharsets.UTF_8));
// 通过该输出流写入数据到通中, 要转换为字符流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
// 写入数据
bw.write("hello, server 字符流");
// 插入一个换行符, 表示写入的内容结束
bw.newLine();
// 手动刷新字符流, 否则写不进去
bw.flush();
// 设置结束标记, 不然形成死锁无法创建 inputStream
// socket.shutdownOutput();
// 通过 socket 获得输入流, 转换为字符流
InputStream inputStream = socket.getInputStream();
// 读取数据
// byte[] buffer = new byte[1024];
// int readLen;
// while ((readLen = inputStream.read(buffer)) != -1) {
// System.out.println(new String(buffer, 0, readLen));
// }
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String s = br.readLine();
System.out.println(s);
// 关闭流和释放资源
bw.close();
br.close();
socket.close();
System.out.println("客户端退出.... ");
}
}