[英]Am i closing this socket correctly?
在大多数情况下,它可以工作,但是有时却不起作用,该代码仅if(input.equals("Done")){
时才关闭套接字,我可以正确关闭吗? ,在我看来,无论我尝试关闭它的代码是什么? 谁能向我确认或更正?
Socket socket1;
int portNumber = 4445;
socket1 = new Socket(InetAddress.getLocalHost(), portNumber);
BufferedReader br = new BufferedReader(new InputStreamReader(socket1.getInputStream()));
PrintWriter pw = new PrintWriter(socket1.getOutputStream(), true);
pw.println("Hello");
pw.println("Hello");
pw.println("Hello");
pw.println("Hello");
String input = br.readLine();
while ((input = br.readLine()) != null) {
if(input.equals("Hi")){
pw.println("Hello");
}
else if(input.equals("Done")){
break;
}
br.close();
pw.close();
socket1.close();
}
首先,您将对象放置在 while循环内,因此无论接收到第二条消息,它们都将被放置(在while循环之前,您将第一个行跳过了)。 如果第二条消息有可能被完成,那么您将退出循环而没有任何套接字处置,因此它们仍在您的内存中。 而且,正如注释中指出的那样,如果您的任何对象引发异常,则可能会遇到问题。 此应用程序的正确版本为:
Socket socket1 = null;
int portNumber = 4445;
BufferedReader br = null;
PrintWriter pw = null;
try
{
socket1 = new Socket(InetAddress.getLocalHost(), portNumber);
br = new BufferedReader(new InputStreamReader(socket1.getInputStream()));
pw = new PrintWriter(socket1.getOutputStream(), true);
pw.println("Hello");
pw.println("Hello");
pw.println("Hello");
pw.println("Hello");
String input = null;
while ((input = br.readLine()) != null) {
if(input.equals("Hi")){
pw.println("Hello");
}
else if(input.equals("Done")){
break;
}
}
finally
{
if(br != null) br.close();
if(pw != null) pw.close();
if(socket1 != null) socket1.close();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.