firefox不支持Android Web服务器

我在Android中创建了一个绑定到端口2090的网络服务器并提供Android设备的SD卡,如果我在Internet Explorer中键入ip:port/index.htm然后它工作得很好但是当我在其他浏览器中打开它时它工作得很好它打开HTML文件作为文本请帮助我。

这是我的代码。

服务器启动器类:

 package dolphin.developers.com; import java.io.File; import java.io.IOException; import java.net.InetAddress; import android.app.Activity; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.Toast; import dolphin.devlopers.com.R; public class JHTTS extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.facebook); try{ File documentRootDirectory = new File (Environment.getExternalStorageDirectory().getAbsolutePath()+"/"); JHTTP j = new JHTTP(documentRootDirectory,2090); j.start(); Log.d("Server Rooot", ""+documentRootDirectory); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

jhttp类:

 package dolphin.developers.com; import java.io.File; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; public class JHTTP extends Thread { private File documentRootDirectory; private String indexFileName = "index.htm"; private ServerSocket server; private int numThreads = 50; public JHTTP(File documentRootDirectory, int port, String indexFileName) throws IOException { if (!documentRootDirectory.isDirectory( )) { throw new IOException(documentRootDirectory + " does not exist as a directory"); } this.documentRootDirectory = documentRootDirectory; this.indexFileName = indexFileName; this.server = new ServerSocket(port); } public JHTTP(File documentRootDirectory, int port) throws IOException { this(documentRootDirectory, port, "index.htm"); } public JHTTP(File documentRootDirectory) throws IOException { this(documentRootDirectory, 9001, "index.htm"); } public void run( ) { for (int i = 0; i < numThreads; i++) { Thread t = new Thread( new RequestProcessor(documentRootDirectory, indexFileName)); t.start( ); } System.out.println("Accepting connections on port " + server.getLocalPort( )); System.out.println("Document Root: " + documentRootDirectory); while (true) { try { Socket request = server.accept( ); RequestProcessor.processRequest(request); }catch (SocketException ex) { } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } 

的RequestProcessor:

 package dolphin.developers.com; import java.net.*; import java.io.*; import java.util.*; public class RequestProcessor implements Runnable { @SuppressWarnings("rawtypes") private static List pool = new LinkedList( ); private File documentRootDirectory; private String indexFileName = "index.htm"; public RequestProcessor(File documentRootDirectory, String indexFileName) { if (documentRootDirectory.isFile( )) { throw new IllegalArgumentException( "documentRootDirectory must be a directory, not a file"); } this.documentRootDirectory = documentRootDirectory; try { this.documentRootDirectory = documentRootDirectory.getCanonicalFile( ); } catch (IOException ex) { } if (indexFileName != null) this.indexFileName = indexFileName; } @SuppressWarnings("unchecked") public static void processRequest(Socket request) { synchronized (pool) { pool.add(pool.size( ), request); pool.notifyAll( ); } } public void run( ) { // for security checks String root = documentRootDirectory.getPath( ); while (true) { Socket connection; synchronized (pool) { while (pool.isEmpty( )) { try { pool.wait( ); } catch (InterruptedException ex) { } } connection = (Socket) pool.remove(0); } try { String filename; String contentType; OutputStream raw = new BufferedOutputStream( connection.getOutputStream( ) ); Writer out = new OutputStreamWriter(raw); Reader in = new InputStreamReader( new BufferedInputStream( connection.getInputStream( ) ),"ASCII" ); StringBuffer requestLine = new StringBuffer( ); int c; while (true) { c = in.read( ); if (c == '\r' || c == '\n') break; requestLine.append((char) c); } String get = requestLine.toString( ); // log the request System.out.println(get); StringTokenizer st = new StringTokenizer(get); String method = st.nextToken( ); String version = ""; if (method.equals("GET")) { filename = st.nextToken( ); if (filename.endsWith("/")) filename += indexFileName; contentType = guessContentTypeFromName(filename); if (st.hasMoreTokens( )) { version = st.nextToken( ); } File theFile = new File(documentRootDirectory, filename.substring(1,filename.length( ))); if (theFile.canRead( ) // Don't let clients outside the document root && theFile.getCanonicalPath( ).startsWith(root)) { DataInputStream fis = new DataInputStream( new BufferedInputStream( new FileInputStream(theFile) ) ); byte[] theData = new byte[(int) theFile.length( )]; fis.readFully(theData); fis.close( ); if (version.startsWith("HTTP ")) { // send a MIME header out.write("HTTP/1.0 200 OK\r\n"); Date now = new Date( ); out.write("Date: " + now + "\r\n"); out.write("Server: JHTTP/1.0\r\n"); out.write("Content-length: " + theData.length + "\r\n"); out.write("Content-type: " + contentType + "\r\n\r\n"); out.flush( ); } // end if // send the file; it may be an image or other binary data // so use the underlying output stream // instead of the writer raw.write(theData); raw.flush( ); } // end if else { // can't find the file if (version.startsWith("HTTP ")) { // send a MIME header out.write("HTTP/1.0 404 File Not Found\r\n"); Date now = new Date( ); out.write("Date: " + now + "\r\n"); out.write("Server: JHTTP/1.0\r\n"); out.write("Content-type: text/html\r\n\r\n"); } out.write("\r\n"); out.write("File Not Found\r\n"); out.write("\r\n"); out.write(""); out.write("

HTTP Error 404: File Not Found

\r\n"); out.write("\r\n"); out.flush( ); } } else { // method does not equal "GET" if (version.startsWith("HTTP ")) { // send a MIME header out.write("HTTP/1.0 501 Not Implemented\r\n"); Date now = new Date( ); out.write("Date: " + now + "\r\n"); out.write("Server: JHTTP 1.0\r\n"); out.write("Content-type: text/html\r\n\r\n"); } out.write("\r\n"); out.write("Not Implemented\r\n"); out.write("\r\n"); out.write(""); out.write("

HTTP Error 501: Not Implemented

\r\n"); out.write("\r\n"); out.flush( ); } } catch (IOException ex) { } finally { try { connection.close( ); } catch (IOException ex) {} } } // end while } // end run public static String guessContentTypeFromName(String name) { if (name.endsWith(".html") || name.endsWith(".htm")) { return "text/html"; } else if (name.endsWith(".txt") || name.endsWith(".java")) { return "text/plain"; } else if (name.endsWith(".gif")) { return "image/gif"; } else if (name.endsWith(".class")) { return "application/octet-stream"; } else if (name.endsWith(".jpg") || name.endsWith(".jpeg")) { return "image/jpeg"; } else return "text/plain"; } } // end RequestProcessor

logcat的:

没有发布,因为没有错误。

问题解决了我换了线

 else return "text/plain"; 

 else return "text/html"; 

实际上问题是MIME类型,谢谢大家帮助我…