有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在使用完服务器端口后关闭它?

注意:我在这里发现了一个类似的问题:

How to close port after using server sockets

但没有找到任何令人满意的答案

以下是我的客户端程序代码:

package hf;

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

public class DailyAdviceClient 
{
    private static final int chatPort = 4242;
    public static void main(String[] args)
    {
        DailyAdviceClient client = new DailyAdviceClient();
        client.go();
    }

    private void go()
    {
        try
        {
            Socket socket = new Socket("127.0.0.1",chatPort);
            InputStreamReader inputStream = new InputStreamReader(socket.getInputStream());
            BufferedReader bufferedReader = new BufferedReader(inputStream);

            String advice = bufferedReader.readLine();
            System.out.println("Advice received by the client for today is "+advice);

            bufferedReader.close();
        }
        catch(Exception e)
        {
            System.out.println("Failed to connect to the server");
        }
    }
}

下面是服务器程序的代码:

package hf;

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

public class DailyAdviceServer 
{
    private String[] adviceList = {"Take smaller bites",
            "Go for the tight jeans. No they do NOT make you look fat.",
            "One word: inappropriate", 
            "Just for today, be honest. Tell your boss what you *really* think", 
            "You might want to rethink that haircut."};
    private static final int chatPort = 4242;

    public static void main(String[] args)
    {
        DailyAdviceServer server = new DailyAdviceServer();
        server.go();
    }

    private void go()
    {
        try
        {
            ServerSocket serverSocket = new ServerSocket(chatPort);

            while(true)
            {
                Socket socket = serverSocket.accept();

                PrintWriter writer = new PrintWriter(socket.getOutputStream());

                String advice = getTodaysAdvice();

                writer.println(advice);
                writer.close();
            }
        }
        catch(Exception e)
        {
            System.out.println("Error in establishing connection with the client");
        }
    }

    private String getTodaysAdvice()
    {
        String advice = null;

        int randomIndex = (int) (Math.random()*adviceList.length);
        advice = adviceList[randomIndex];
        return advice;
    }
}

在应用程序中,每当客户端程序连接到服务器程序时,它都会收到一个字符串,其中包含当天的建议

当我跑的时候

netstat -an

在我的Windows计算机的命令提示符中,正如前面链接中的一个答案所建议的那样,我收到一条消息,即端口4242已关闭

LISTENING

如何关闭端口并使其可供将来重新使用


共 (2) 个答案

  1. # 1 楼答案

    在关闭writerbufferedReader之后,必须使用socket.close()。因此,端口将可以自由进行另一次通信

  2. # 2 楼答案

    要摆脱侦听端口,必须调用serverSocket.close().