目次

Android端末をwebサーバにできるNanoHTTPDを使ってみよう!

2018年11月23日

Android端末を、Webサーバとして簡単に組み込むことができる
NanoHTTPDという機能があります.

この子がなかなか優秀で、javaファイルを一つ取り込むだけで

AndroidをWebサーバにできるイカす子なんですね.

てなわけで今回は、そのNanoHTPPDを利用して

Android端末にwebサーバを構築する手順をお伝えしましょう!

ちなみにソースコードをブログに乗せる方法は、別記事に載せてあります。

  1. まずGithubにてNanoHTTPDにアクセス
  2. ダウンロードしましょう
  3. nanohttpd/core/src/main/java/org/nanohttpd/protocols/http/にあるNanoHTTPDを自分のプロジェクトのメインアクティビティーと同じ場所に入れよう

とりあえずこれで準備はできました.
次にAndroidManifest.xmlに以下の二行を設定

[xml]
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
[/xml]

次に,メインアクティビティーに移ります.
サーバを起動するには,NanoHTTPDを継承したクラスを作成し,それを呼び出します.
今回はWebServerクラスを作成します.
では,まずWebServerを呼び出す処理を

[java]try {
WebServer wb =new WebServer();
wb.start();
} catch (IOException e) {
}
[/java]

これで呼び出します.
そしてWebServerのクラスについて下に書きます

[java]
private class WebServer extends NanoHTTPD {
public WebServer() throws IOException {
super(8080);
}
@Override
public Response serve(IHTTPSession session) {
Log.d("NanoHttod", "起動したよ!");
String msg01="&lt;!DOCTYPE html&gt;\n" +
"&lt;html lang=\"ja\"&gt;\n" +
"&lt;head&gt;\n" +
"&lt;meta charset=\"UTF-8\"&gt;\n" +
"&lt;title&gt;サイトのタイトル&lt;/title&gt;\n" +
"&lt;/head&gt;\n" +
"&lt;body&gt;\n" +
" \n" +
"//ここにサイトに表示するコンテンツ内容を記述\n" +
" \n" +
"&lt;/body&gt;\n" +
"&lt;/html&gt;\n";
return newFixedLengthResponse(msg01);
}
}
[java]
これでWebサーバが完成しました!
まず、ポート番号の指定について下に具体的に書きます
[java]
public WebServer() throws IOException {
super(8080);
}
[/java]

これでポート番号8080を開放しています
自分の端末で,このサイトを見るには
webブラウザにて,127.0.0.1:8080を入力すれば
Webサイトを見ることができます.

表示するHTMLは,どこに記述されているかというと
変数msg01にて記述しています
これをretrunすれば,Webサイトを見ることができます.

returnは最後に書いてある

[java]
return newFixedLengthResponse(msg01);
[/java]

にて宣言しています

こんなに簡単にwebサーバが,構築できるんだから
今の技術というのはすごいものですね….

ちなみにWi-Fi Directを利用すると,接続しているグループ端末が
192.168.49.1:「ポート番号」をWebブラウザで入力すればアクセスできます.

いろいろ拡張できるみたいなので興味ある方は是非

では,最後に今回のソースコードを全て載せておきます

[java]
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AlertDialog.Builder(MainActivity.this)
.setTitle("NanoHttpd")
.setMessage("起動しました")
.setPositiveButton("OK", null)
.show();
try {
WebServer wb =new WebServer();
wb.start();
} catch (IOException e) {
}
}
private class WebServer extends NanoHTTPD {
public WebServer() throws IOException {
super(8080);
}
@Override
public Response serve(IHTTPSession session) {
Log.d("NanoHttod", "起動したよ!");
String msg01="&lt;!DOCTYPE html&gt;\n" +
"&lt;html lang=\"ja\"&gt;\n" +
"&lt;head&gt;\n" +
"&lt;meta charset=\"UTF-8\"&gt;\n" +
"&lt;title&gt;サイトのタイトル&lt;/title&gt;\n" +
"&lt;/head&gt;\n" +
"&lt;body&gt;\n" +
" \n" +
"//ここにサイトに表示するコンテンツ内容を記述\n" +
" \n" +
"&lt;/body&gt;\n" +
"&lt;/html&gt;\n";
return newFixedLengthResponse(msg01);
}
}
}
[/java]