在TCP服务器端中这段代码有什么用try { if (reader != null) { reader.close(); // 关闭流 } if (socket != null) { socket.close(); // 关闭套接字 }

package p349;

import java.io.*;
import java.net.*;

public class MyTcp { // 创建类MyTcp
private BufferedReader reader; // 创建BufferedReader对象
private ServerSocket server; // 创建ServerSocket对象
private Socket socket; // 创建Socket对象socket

void getserver() {
    try {
        server = new ServerSocket(8997); // 实例化Socket对象
        System.out.println("服务器套接字已经创建成功"); // 输出信息
        while (true) { // 如果套接字是连接状态
            System.out.println("等待客户机的连接"); // 输出信息
            socket = server.accept(); // 实例化Socket对象
            reader = new BufferedReader(new InputStreamReader(socket
                    .getInputStream())); // 实例化BufferedReader对象
            getClientMessage(); // 调用getClientMessage()方法
        }
    } catch (Exception e) {
        e.printStackTrace(); // 输出异常信息
    }
}

private void getClientMessage() {
    try {
        while (true) { // 如果套接字是连接状态
            if (reader.ready()) {
                // 获得客户端信息
                System.out.println("客户机:" + reader.readLine());
            }
        }
    } catch (Exception e) {
        e.printStackTrace(); // 输出异常信息
    }
    try {
        if (reader != null) {
            reader.close(); // 关闭流
        }
        if (socket != null) {
            socket.close(); // 关闭套接字
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) { // 主方法
    MyTcp tcp = new MyTcp(); // 创建本类对象
    tcp.getserver(); // 调用方法
}

}

把打开的socket和reader关闭,释放端口

当然销毁是Socket对象占用的资源和端口,reader用完也要释放资源,不close()也行啊,只是会越运行越慢。
不过有个问题,getClientMessage()中有个while(true),那close()方法永远也执行不到哇

reader!=null 的时候关闭是为什么
此时缓存区好像还有数据吧