[英]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.