Name: dbT83986 Date: 03/11/99 When making a socket connection to *certain* servers, BufferedReader.readLine() (or read() and read(char[], int, int] for that matter) fails to recognize EOF. One such server is Sun's FTP server (ftp.sun.com). Observe the following code. package MyUtils; import java.io.*; import java.net.*; public class FTPTest { public static void main(String[] args) { try { Socket sock = new Socket("ftp.sun.com", 21); sock.setSoTimeout(10000); BufferedReader reader = new BufferedReader(new InputStreamReader(sock.getInputStream())); String line = reader.readLine(); System.out.println("line: [" + line + "]"); while (line != null) { line = reader.readLine(); System.out.println("line: [" + line + "]"); } } catch (Exception e) { e.printStackTrace(); } finally { } } } --- This code generates this output: line: [220-Welcome to Sun Microsystems Corporate FTP Server.] line: [220-] line: [220 ftp FTP server (ftpd Wed Oct 30 23:31:06 PST 1996) ready.] java.io.InterruptedIOException: Read timed out at java.net.SocketInputStream.read(SocketInputStream.java:84) at java.net.SocketInputStream.read(SocketInputStream.java:67) at java.io.InputStreamReader.fill(Compiled Code) at java.io.InputStreamReader.read(InputStreamReader.java:227) at java.io.BufferedReader.fill(Compiled Code) at java.io.BufferedReader.readLine(Compiled Code) at PDUtils.FTPTest.main(Compiled Code) (Review ID: 55258) ======================================================================
|