2016-04-05 6 views
0

アンドロイドフォンとしてサーバーにする必要があり、モジュールが私に接続し、GETメソッド(TCP/IP接続)を介してデータをリクエストするシナリオがあります。 接続の部分は簡単ですが、私の問題はこのGETメソッドをどのように扱うべきかという点です。GETレスポンスでアンドロイドサーバーとしてデータを送信する方法

class AsyncServerThread extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... voids) { 
     Socket socket = null; 
     try { 
      serverSocket = new ServerSocket(SERVERPORT); 
      Log.e("ServerThread", "Connected"); 
     } catch (final IOException e) { 
      Log.e("serverSocketExc", "?" + e.getMessage()); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(getApplicationContext(), "serverSocketExc: " + 
            "?" + e.getMessage(), 
          Toast.LENGTH_LONG).show(); 
       } 
      }); 
      e.printStackTrace(); 
     } 
     Log.e("ServerThread", "listening for new connections"); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(getApplicationContext(), "ServerThread: listening for new connections.", 
         Toast.LENGTH_LONG).show(); 
      } 
     }); 
     while (shallContinue) { 

      try { 

       final Socket tempSocket = socket = serverSocket.accept(); 

       if (tempSocket.isConnected()) { 
        Log.e("socket", "accepted new Connection"); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          Toast.makeText(getApplicationContext(), "accepted new Connection.", 
            Toast.LENGTH_LONG).show(); 
         } 
        }); 

        /*CommunicationThread commThread = new CommunicationThread(socket); 
        new Thread(commThread).start();*/ 
        Log.e("AsyncServerThread", "going to create client thread"); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          new AsyncClientThread().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, tempSocket); 
         } 
        }); 

        out = new PrintWriter(new BufferedWriter(
          new OutputStreamWriter(socket.getOutputStream())), 
          true); 
       } else { 
        Log.e("socket", "no new Connection"); 
       } 

      } catch (IOException e) { 
       Log.e("accept", "?" + e.getMessage()); 
       e.printStackTrace(); 
      } 
     } 
     Log.e("ServerThread", "ended listening for new connection"); 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(getApplicationContext(), "ServerThread: ended listening for new connection.", 
         Toast.LENGTH_LONG).show(); 
      } 
     }); 
     try { 
      serverSocket.close(); 
     } catch (IOException e) { 
      Log.e("close", "?" + e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 
+0

使用URLパラメータ –

+0

明確ではありません。リクエストがGETリクエストであるかどうかを知る方法を尋ねていますか? – dsharew

+0

@DegenSharewはい、私はそれを見てくださいとはい、私はそれがGET要求かどうかを検出したいと思う質問を編集しました。 –

答えて

2

単語がPOSTは、PUT ..etcはHTTPプロトコルの世界で発見されているGET。
しかし、httpサーバではなくサーバソケットを作成しました(低レベルのサーバソケットとhttpサーバソケットの作成には違いがあります)。

私は数日前に同様のシナリオを持ち、nanohttpdを使用しました。 これはあなたのアンドロイドデバイス上で小さなhttpd Webサーバーを実行できるようにするエレガントなライブラリです。

サンプルコード:

public class HttpWebServer extends NanoHTTPD { 

    int port; 

    public HttpWebServer(int port) throws IOException { 
     super(port); 
     this.port = port; 
    } 

    public void startServer() throws IOException{ 

     start(); 
     Log.d(LOG_TAG, "visit http://localhost:" + port); 

    } 

    @Override 
    public Response serve(IHTTPSession session) { 


     Log.d(LOG_TAG, "Got http request."); 

     //gets method type; GET, POST, PUT..etc 
     Method method = ((HTTPSession) session).method 


    } 


} 

どのように依存関係を追加するには? GETリクエストで

dependencies { 
    compile 'com.nanohttpd:nanohttpd-webserver:2.1.1' 
} 
+1

多くの人に感謝、私は友人に尋ねた、彼はあなたがここで言ったことに似て、私のアプリでは、そのようなApacheのようなものを実行する必要があると言った、クレジットはあなたです。 –

+0

素晴らしい、私はそれが助けてうれしいです、 – dsharew

関連する問題