Android - Java Server and android client

I have implemented a very, very simple Java server, which basically listens for all requests on port 8080 and writes them to the console.

My code works fine, once. But for each app restart, the server will only take one request. Can anybody help me?

Server code:

public class RunServer {

    public static void main(String[] args) {
        final int port = 8080;
        final String path = "/android";
        try {
            HttpServer server = HttpServer.create(new InetSocketAddress(port), 0);     //Create the server to listen for incoming requests on the specified port
            server.createContext(path, new HttpHandler() { //Set a handler for     incoming requests to the specific path
                @Override
                public void handle(HttpExchange arg0) throws IOException {     //This method is called when new requests are incoming
                            InputStreamReader isr = new     InputStreamReader(arg0.getRequestBody(),"utf-8");
                            BufferedReader br = new BufferedReader(isr);
                            String query = br.readLine();

                            System.out.print(query);
                } });           
            server.setExecutor(null); //Default executor. Other executors may be     used to e.g. use a threadpool for handling concurrent incoming requests.
            server.start(); //Start the server.
        } catch (Exception e) {
            e.printStackTrace();
        }       
    }
}

I am using this client to post to my server:

public class MyAsyncTask extends AsyncTask<String, String, Void>{
    HttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("http://192.168.1.5:8080/android");
    String s;
    @Override
    protected Void doInBackground(String... params) {
        // Building post parameters
        // key and value pair
        List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(2);
        nameValuePair.add(new BasicNameValuePair("email", "[email protected]"));
        nameValuePair.add(new BasicNameValuePair("message",
                "Hi, trying Android HTTP post!"));

        // Url Encoding the POST parameters
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair));
        } catch (UnsupportedEncodingException e) {
            // writing error to Log
            e.printStackTrace();
        }

        // Making HTTP Request
        try {
            HttpResponse response = httpClient.execute(httpPost);

            // writing response to log
            Log.d("Http Response:", response.toString());
        } catch (ClientProtocolException e) {
            // writing exception to log
            e.printStackTrace();
        } catch (IOException e) {
            // writing exception to log
            e.printStackTrace();

        }
        return null;
    }

}

Upvotes: 1

Views: 160

Answers (1)

Drizzt321
Drizzt321

Reputation: 1021

It'd be better to use something like Jetty or Tomcat if you are going to be doing any, marginally serious Java HTTP serving.

If you're going to insist on using HttpServer, not actually really know it, I suspect it has to do with the single-threaded nature of HttpServer in it's default configuration and the socket being kept open & waiting for a period of time after. It may also be that you aren't correctly closing the HttpClient in your Android client, and so it keeps the connection open to the server and so the server is tied up waiting for that client.

Upvotes: 1

Related Questions