簡體   English   中英

未檢測到Java套接字關閉

[英]Java Socket close not detected

我正在編寫一個快速服務器來測試應用程序。 如果我關閉客戶端上的套接字,則不會拋出套接字已關閉的異常。 我一直在寫100mb的隨機數據(這是應該做的)。 如何檢測客戶端是否關閉連接?

import java.io.PrintWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.ServerSocket;
import java.util.Random;

public class server {

public static void main(String [ ] args){

int size = 1048576 * 100;

String response ="HTTP/1.0 200 OK\n" +
    "Server: server\n" +
    // "Date: Sun, 05 Apr 2009 04:40:08 GMT\n" +
    // "Last-Modified: Tue, 23 May 2006 22:18:19 GMT\n" +
    "Content-Type: application/zip\n" +
    "Content-Length: " + size + " \n" +
    "Connection: keep-alive\n";

try{
    ServerSocket serverSocket = new ServerSocket(4444);

    while(true){

    System.out.println( "Listenning..." );
    Socket clientSocket = serverSocket.accept();

    PrintWriter out = 
        new PrintWriter(clientSocket.getOutputStream(), true);
    BufferedReader in = new BufferedReader
        (new InputStreamReader( clientSocket.getInputStream()));
    String inputLine, outputLine;

    System.out.println("-----------Request-----------" );
    while ((inputLine = in.readLine()) != null) {   
        if (inputLine.equals("") == true )
        break;
        System.out.println( inputLine );
    }

    System.out.println("-----------Response-----------" );
    System.out.println( response );
    out.print(response);
    out.print("\r\n");

     //waits for the whole for to finish no exceptions are thrown
    Random rand = new Random();
    for( int i=0 ; i< size ;i++){
        int randnum = rand.nextInt(9);
        out.print( randnum );
    }

    //out.println("test");

    out.close();
    in.close();
    }

}catch( Exception e ) { 
    System.out.println( e.toString() );
}           
}
}

PrintWriter類忽略基礎輸出流引發的異常。 如文檔中所述,您需要積極檢查它是否存在錯誤

您可能會考慮使用Formatter類而不是PrintWriter 它可以幫助您格式化文本,例如PrintStreamPrintWriter (以及更多),並且還可以傳遞基礎Appendable異常(在這種情況下,應為OutputStreamWriter )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM