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
如何关闭端口并使其可供将来重新使用
# 1 楼答案
在关闭
writer
和bufferedReader
之后,必须使用socket.close()
。因此,端口将可以自由进行另一次通信# 2 楼答案
要摆脱侦听端口,必须调用
serverSocket.close().