Hi!
I'm having a problem with detecting when the computer my program is
running on loses its connection to the internet/server while
streaming a HTTP-Response Body.
To be concrete: I'm receiving a file via HTTP-GET and then simply
disconnect the computer from the internet. My program stops receiving
anything but does not throw a SocketTimeoutException or something
similar although I've set all (?) the necessary parameters on the
HttpClient and GetMethod (please see sample code below!). I thought
that something like
client.getHttpConnectionManager().closeIdleConnections(10000); would
do the job but it doesn't. In fact I see something like the following
in the log?!
[DEBUG] IdleConnectionHandler - Checking for connections,
idleTimeout: 1187551910312
The sample code below reproduces the problem: It simply sets up a
HttpClient+GetMethod with an url representing an indefinitely large
mp3 file (internet radio stream) and starts a Thread which reads
data. If you then disconnect your computer the Thread doesn't stop
with an exception.
Java version: 1.5.0_07, Apple Computer, Inc.
Operating system: Mac OS X 10.4.10
HttpClient version: 3.0.1
Thanks a lot!
Michael Partheil
=== Sample code:
public class HttpClientTest
{
private static final String URL = "http://
d85195728.i.tis.core005.cdn.streamfarm.net:80/17000hr/live/3435hr3/
de_96.mp3";
public static void main(String... args) throws Exception
{
HttpClient client = new HttpClient(new
MultiThreadedHttpConnectionManager());
client.getHttpConnectionManager().closeIdleConnections(10000);
client.getHttpConnectionManager().getParams().setSoTimeout(5000);
client.getParams().setSoTimeout(5000);
client.getParams().setIntParameter(HttpClientParams.MAX_REDIRECTS,
10);
client.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);
GetMethod get = new GetMethod(URL);
get.getParams().setSoTimeout(5000);
get.getParams().setCookiePolicy(CookiePolicy.IGNORE_COOKIES);
get.setFollowRedirects(true);
get.addRequestHeader("User-Agent", "WinAmp");
client.executeMethod(get);
InputStream in = get.getResponseBodyAsStream();
(new ReaderThread(in)).start();
}
private static class ReaderThread extends Thread
{
private final InputStream in;
public ReaderThread(InputStream in)
{
this.in = in;
}
public void run()
{
try
{
while (! isInterrupted())
{
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
interrupt();
return;
}
try
{
int toRead = in.available();
if (toRead == 0)
continue;
byte[] buffer = new
byte[toRead];
int nRead = in.read(buffer, 0,
toRead);
if (nRead == -1)
return;
assert nRead == toRead;
System.out.println("read:
"+nRead);
}
catch (IOException e)
{
e.printStackTrace();
return;
}
}
}
finally
{
System.out.println("ReaderThread finished");
}
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]