2012.03.28
【Android SDK】HTTPサーバーの基礎を作る
ちょいと気になったので試しに作ってみる。
サンプル
大分乱雑なサンプル。
package jp.nyakki.HttpTest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketAddress; import android.util.Log; public class TcpHttp extends Thread { ServerSocket m_sServer; Socket m_sClient; @Override public void run() { try { SocketAddress clientAddress; InputStream in; OutputStream out; //ソケット作成 m_sServer = new ServerSocket( 12349 ); Log.d( "nya", "開始"); //クライアントからの接続を待ち受けるループ while (true) { // クライアントの接続を取得 m_sClient = m_sServer.accept(); clientAddress = m_sClient.getRemoteSocketAddress(); Log.d( "nya", "接続中:" + clientAddress); in = m_sClient.getInputStream(); out = m_sClient.getOutputStream(); InputStreamReader isr; BufferedReader br; isr = new InputStreamReader( in ); br = new BufferedReader( isr ); //リクエスト取得 while( true ) { String szLine = br.readLine(); //空行が着たら終了 if( szLine.length() == 0 ) { break; } Log.d( "nya", szLine ); } //レスポンス返却 OutputStreamWriter osw; BufferedWriter bw; osw = new OutputStreamWriter( out ); bw = new BufferedWriter( osw ); bw.write("HTTP/1.1 200 OK\r\n"); bw.write("Content-Type: text/plain; charset=UTF-8\r\n"); bw.write("\r\n"); bw.write("あいうえお"); bw.flush(); //クライアントとの接続を切る m_sClient.close(); } } catch( Exception e ) { //エラー処理 ByteArrayOutputStream baos; PrintStream ps; baos = new ByteArrayOutputStream(); ps = new PrintStream( baos ); e.printStackTrace(ps); Log.d("nya", new String( baos.toByteArray() ) ); } } }
こんなスレッドをアプリ上で実行しておけばいいらしい。
アプリが起動した状態でブラウザで "http://127.0.0.1:12349/" へアクセスすると表示されるはずです。
基本的にはJavaのTCP処理でHTTPっぽく裁いてあげればよいらしい。
ServerSocketのコンストラクタでポートを決定。
自分のスマホだと結構いろんなところでポートをすでに取られいるのかこのタイミングでエラーとなる。(80や12345とか)
感想
てか、HTTPの基礎ってこんなもんなのですね。
もう少し情報を整備すればApache(藁)も出来るんじゃないかと思ってしまいます。
基礎から学ぶ Android SDK 吉井 博史 シーアンドアール研究所 2010-01-25 |
関連記事