I’ve been working on a Java application for a while now, on my development system it runs fine and works as I would expect. However when testing on the Beaglebone black it doesn’t work as expected.
The application is a web-server that serves up a specific set of pages, (index.html, a css and javascript file and some images).
When run from my development PC, it returns the documents correctly, on the beaglebone black it doesn’t return, until I terminate the application.
Below is my function to send back a response:
/**
* Method:
* httpResponse
* @param dos, the data output stream to send back the response to
* @param arybytResponse, a byte array containing the response
* @param strMIME, optional mimic type
*/
public static void httpResponse(DataOutputStream dos,
byte[] arybytResponse,
String strMIME) {
try {
final String CRLF = "\r\n";
File objFile = null;
String strResponse =
HTTP_ID + "/1.1 200 OK" + CRLF +
"Cache-Control: no-cache, must-revalidate" + CRLF +
"Expires: Mon, 26 Jul 1997 05:00:00 GMT" + CRLF +
"Content-type: ";
if ( strMIME != null ) {
strResponse += strMIME;
} else {
strResponse += mstrMIME;
}
strResponse += CRLF;
if ( mstrError != "" ) {
//Publish the error message
strResponse += CRLF + "{\"error\":\"" + mstrError + "\"}";
dos.write(strResponse.getBytes());
dos.write(arybytResponse);
dos.close();
return;
}
if ( mblnBinary == true ) {
strResponse += CRLF;
dos.write(strResponse.getBytes());
dos.write(arybytResponse);
dos.close();
return;
}
String strJSON = new String(arybytResponse);
if ( strJSON.endsWith(".html") == true ) {
//strJSON contains a html document reference
String strPath = mstrAppPath + strJSON;
objFile = new File(strPath);
} else {
//Default to JSON content
strResponse += "Content-length: " +
Integer.toString(strJSON.length()) + CRLF + CRLF +
strJSON;
}
if ( objFile != null ) {
if ( objFile.exists() == false ) {
String strNotFound = "<html><body>Not found!</body></html>";
strResponse += "Content-length: " +
Integer.toString(strNotFound.length()) + CRLF + CRLF +
strNotFound;
} else {
InputStream is = new FileInputStream(objFile);
byte[] arybytFile = new byte[(int)objFile.length()];
is.read(arybytFile);
is.close();
strResponse += "Content-length: " +
Integer.toString(arybytFile.length) + CRLF + CRLF +
new String(arybytFile);
}
}
dos.write(strResponse.getBytes());
dos.close();
} catch (IOException ex) {
//Not interested in errors here
//ex.printStackTrace();
}
}
Thank you for any help.