Preview 11 より前に機能していた Hello World で基本的に応答する、Android デバイスで実行される単純な Web サーバーを作成しました。context.Response.OutputStream.Write( buffer, 0, buffer.Length ); でアプリケーションがクラッシュします。
コード:
public class Activity1 : Activity
{
private HttpListener listener;
protected override void OnCreate( Bundle bundle )
{
base.OnCreate( bundle );
// Set our view from the "main" layout resource
SetContentView( Resource.Layout.Main );
// Get our button from the layout resource,
// and attach an event to it
var button = FindViewById<Button>( Resource.Id.MyButton );
button.Click += button_Click;
}
private void button_Click( object sender, EventArgs e )
{
try
{
if ( !HttpListener.IsSupported )
return;
listener = new HttpListener();
listener.Prefixes.Add( "http://+:8001/" );
listener.Start();
listener.BeginGetContext( HandleRequest, listener );
}
catch ( Exception )
{
throw;
}
}
private void HandleRequest( IAsyncResult result )
{
HttpListenerContext context = listener.EndGetContext( result );
string response = "<html>Hello World</html>";
byte [] buffer = Encoding.UTF8.GetBytes( response );
context.Response.ContentLength64 = buffer.Length;
context.Response.OutputStream.Write( buffer, 0, buffer.Length );
context.Response.OutputStream.Close();
listener.BeginGetContext( HandleRequest, listener );
}
}
ログ:
I/ActivityManager( 112): プロセス torqsoftware.testwebserver (pid 3044) が停止しました。
I/WindowManager(112): WIN DEATH: Window{44d15120 torqsoftware.testwebserver/monodroidwebservertest.Activity1 paused=false}
D/Zygote ( 58): プロセス 3044 がシグナルによって終了しました (4)
V/RenderScript_jni(199): surfaceCreated
V/RenderScript_jni(199): surfaceChanged
I/UsageStats( 112): torqsoftware.testwebserver で既に再開されているにもかかわらず、com.android.launcher が予期せず再開されました
W/InputManagerService(112): pid 3044 uid 10062 に setActive(false) 通知を送信する RemoteException を取得しました
ありがとうレオ