Implement Uncomplicated Http Server Running On Android

Posted on

Example to implement elementary HTTP server on Android:


MainActivity.java

package com.example.androidhttpserver;  import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketException; import java.util.Enumeration;  import android.support.v7.app.ActionBarActivity; import android.widget.EditText; import android.widget.TextView; import android.os.Bundle;  populace course of report MainActivity extends ActionBarActivity {   EditText welcomeMsg;  TextView infoIp;  TextView infoMsg;  String msgLog = "";    ServerSocket httpServerSocket;   @Override  protected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);    welcomeMsg = (EditText) findViewById(R.id.welcomemsg);   infoIp = (TextView) findViewById(R.id.infoip);   infoMsg = (TextView) findViewById(R.id.msg);    infoIp.setText(getIpAddress() + ":"     + HttpServerThread.HttpServerPORT + "\n");    HttpServerThread httpServerThread = novel HttpServerThread();   httpServerThread.start();  }    @Override  protected void onDestroy() {   super.onDestroy();    if (httpServerSocket != null) {    endeavour {     httpServerSocket.close();    } select manage of (IOException e) {     e.printStackTrace();    }   }  }   mortal String getIpAddress() {   String ip = "";   endeavour {    Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface      .getNetworkInterfaces();    piece (enumNetworkInterfaces.hasMoreElements()) {     NetworkInterface networkInterface = enumNetworkInterfaces       .nextElement();     Enumeration<InetAddress> enumInetAddress = networkInterface       .getInetAddresses();     piece (enumInetAddress.hasMoreElements()) {      InetAddress inetAddress = enumInetAddress.nextElement();       if (inetAddress.isSiteLocalAddress()) {       ip += "SiteLocalAddress: "         + inetAddress.getHostAddress() + "\n";      }      }     }    } select manage of (SocketException e) {    // TODO Auto-generated select manage of block    e.printStackTrace();    ip += "Something Wrong! " + e.toString() + "\n";   }    supply ip;  }    mortal course of report HttpServerThread extends Thread {      static terminal int HttpServerPORT = 8888;    @Override   populace void run() {    Socket socket = null;        endeavour {     httpServerSocket = novel ServerSocket(HttpServerPORT);          while(true){      socket = httpServerSocket.accept();       HttpResponseThread httpResponseThread =        novel HttpResponseThread(        socket,         welcomeMsg.getText().toString());      httpResponseThread.start();     }    } select manage of (IOException e) {     // TODO Auto-generated select manage of block     e.printStackTrace();    }    }      }    mortal course of report HttpResponseThread extends Thread {      Socket socket;   String h1;      HttpResponseThread(Socket socket, String msg){    this.socket = socket;    h1 = msg;   }    @Override   populace void run() {    BufferedReader is;    PrintWriter os;    String request;            endeavour {     is = novel BufferedReader(new InputStreamReader(socket.getInputStream()));     asking = is.readLine();          bone = novel PrintWriter(socket.getOutputStream(), true);          String answer =       "<html><head></head>" +      "<body>" +      "<h1>" + h1 + "</h1>" +      "</body></html>";          os.print("HTTP/1.0 200" + "\r\n");     os.print("Content type: text/html" + "\r\n");     os.print("Content length: " + response.length() + "\r\n");     os.print("\r\n");     os.print(response + "\r\n");     os.flush();     socket.close();               msgLog += "Request of " + asking        + " from " + socket.getInetAddress().toString() + "\n";     MainActivity.this.runOnUiThread(new Runnable() {       @Override      populace void run() {              infoMsg.setText(msgLog);      }     });         } select manage of (IOException e) {     // TODO Auto-generated select manage of block     e.printStackTrace();    }        return;   }  }  } 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     android:paddingBottom="@dimen/activity_vertical_margin"     android:paddingLeft="@dimen/activity_horizontal_margin"     android:paddingRight="@dimen/activity_horizontal_margin"     android:paddingTop="@dimen/activity_vertical_margin"     tools:context=".MainActivity" >      <TextView         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_gravity="center_horizontal"         android:autoLink="web"         android:text="https://rootandroid.org//"         android:textStyle="bold" />          <EditText         android:id="@+id/welcomemsg"         android:layout_width="match_parent"         android:layout_height="wrap_content"         android:text="Welcome from " />      <TextView         android:id="@+id/infoip"         android:layout_width="wrap_content"         android:layout_height="wrap_content" />      <ScrollView         android:layout_width="match_parent"         android:layout_height="match_parent" >          <TextView             android:id="@+id/msg"             android:layout_width="wrap_content"             android:layout_height="wrap_content" />     </ScrollView>  </LinearLayout> 

Example to implement elementary HTTP server on Android Implement elementary HTTP server running on AndroidDownload the files.

Related:
– Simple spider web server using org.apache.http.protocol.HttpService

Updated@2015-11-25:
Permission of “android.permission.INTERNET” is needed inward AndroidManifest.xml.

Updated@2015-11-26:
This code NOT ambit Android 5, may live on all 5+ version.
Fixed, lift post “socket.getInetAddress() supply aught on Android 5“.