Re: How can I detect a carriage return using java.net
.... and the following program demonstrates clearly that I am stone cold
motherless wrong.
The only way it prints the RST line is if the write line is enabled. It
can't tell the difference between a reset and a FIN when reading.
=====================================
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketResetTest
{
/** Creates a new instance of SocketResetTest */
public static void main(String[] args) throws IOException
{
ServerSocket ss = new ServerSocket(0);
Socket cs = new Socket("localhost", ss.getLocalPort());
Socket cc = ss.accept();
cc.getOutputStream().write("Hello".getBytes());
cc.setSoLinger(false, 0);
cc.close();
ss.close();
try
{
// This write detects the RST.
// Without it, the read detects the EOS.
// cs.getOutputStream().write("H".getBytes());
int c;
while ((c = cs.getInputStream().read()) > 0)
System.out.print((char)c);
System.out.println("");
System.out.println("Detected an EOS, seemed like a FIN");
}
catch (IOException exc)
{
System.out.println("Detected an error, seemed like an RST");
}
cs.close();
}
}