2011-02-04 5 views
1

J'ai créé un simple serveur web fonctionnant sur l'appareil Android qui répondait essentiellement avec Hello World et qui fonctionnait avant Preview 11. Y a-t-il eu un changement majeur qui fait que ça ne marche plus ou je ne suis plus Je fais quelque chose de mal? L'application se bloque sur context.Response.OutputStream.Write (buffer, 0, buffer.Length);Serveur web simple MonoDroid

code:

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); 
    } 
} 

journal:

I/ActivityManager (112): Processus torqsoftware.testwebserver (pid 3044) est mort.

I/WindowManager (112): WIN MORT: Fenêtre {44d15120 torqsoftware.testwebserver/monodroidwebservertest.Activity1 pause = false}

D/Zygote (58): Processus 3044 terminé par signal (4)

V/RenderScript_jni (199): surfaceCreated

V/RenderScript_jni (199): surfaceChanged

I/UsageStats (112): CV inattendu de com.android.launcher alors déjà repris dans torqsoftware.testwebserver

W/InputManagerService (112): Got RemoteException envoi setActive (false) notification à pid 3044 uid 10062

Merci Leo

+2

Vous pouvez ajouter la partie du fichier journal qui a l'exception. http://monodroid.net/Documentation/Guides/Android_Debug_Log – jpobst

+0

le journal n'est pas très utile, mais il est ici – leonardo

Répondre

2

Il semble être lié au fait qu'une activité est "en pause" lorsque l'utilisateur passe à une autre application dans Android. Comme dans ce cas, vous avez peut-être ouvert le navigateur pour accéder au serveur http qui s'exécute dans l'activité en pause. Je vous suggère d'implémenter le serveur http en tant que Service et non en tant qu'activité.