2013-09-03 3 views
3

본문은 모두 프로그램 세계에서 새로운 것입니다. 문제가 발생합니다. 내 요청은 Java 코드를 사용하여 Android 태블릿과 데스크탑 PC 간의 통신과 관련이 있습니다. 위의 코드android 응용 프로그램과 java 사이의 의사 소통

import java.io.IOException; 
    import java.io.PrintWriter; 
    import javax.servlet.ServletException; 
    import javax.servlet.http.HttpServlet; 
    import javax.servlet.http.HttpServletRequest; 
    import javax.servlet.http.HttpServletResponse; 

    public class HelloWorldServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    public HelloWorldServlet() { 
    super(); 
    } 

protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 
    PrintWriter out = response.getWriter(); 
    out.println("Hello Android !!!!"); 
} 
} 

내 로컬 시스템 서버 (톰캣 6.0) 저는 여기에 println을 통해 메시지를 보내고에서 실행되는 내 서블릿 코드와 나는 다른 시스템에서 실행되고 내 안드로이드 응용 프로그램에서 동일한 메시지를 reveive 싶어. 이제 다른 시스템에서 실행중인 안드로이드 코드를 게시하겠습니다. 다음은 192.68.0.2

  import java.io.BufferedReader; 
      import java.io.IOException; 
      import java.io.InputStream; 
      import java.io.InputStreamReader; 
      import java.net.HttpURLConnection; 
      import java.net.URL; 
      import java.net.URLConnection; 
      import android.app.Activity; 
      import android.os.AsyncTask; 
      import android.os.Bundle; 
      import android.view.View; 
      import android.view.View.OnClickListener; 
      import android.widget.Button; 
      import android.widget.TextView; 

    public class HttpGetServletActivity3 extends Activity implements 
    OnClickListener { 
Button button; 
TextView outputText; 

public static final String URL = 
    "http://192.168.0.2:9999/HttpGetServlet/HelloWorldServlet"; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    findViewsById(); 

    button.setOnClickListener(this); 
} 

private void findViewsById() { 
    button = (Button) findViewById(R.id.button); 
    outputText = (TextView) findViewById(R.id.outputTxt); 
} 

public void onClick(View view) { 
    GetXMLTask task = new GetXMLTask(); 
    task.execute(new String[] { URL }); 
} 

private class GetXMLTask extends AsyncTask<String, Void, String> { 
    @Override 
    protected String doInBackground(String... urls) { 
     String output = null; 
     for (String url : urls) { 
      output = getOutputFromUrl(url); 
     } 
     return output; 
    } 

    private String getOutputFromUrl(String url) { 
     StringBuffer output = new StringBuffer(""); 
     try { 
      InputStream stream = getHttpConnection(url); 
      BufferedReader buffer = new BufferedReader(
        new InputStreamReader(stream)); 
      String s = ""; 
      while ((s = buffer.readLine()) != null) 
       output.append(s); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 
     return output.toString(); 
    } 

    // Makes HttpURLConnection and returns InputStream 
    private InputStream getHttpConnection(String urlString) 
      throws IOException { 
     InputStream stream = null; 
     URL url = new URL(urlString); 
     URLConnection connection = url.openConnection(); 

     try { 
      HttpURLConnection httpConnection = (HttpURLConnection) connection; 
      httpConnection.setRequestMethod("GET"); 
      httpConnection.connect(); 

      if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       stream = httpConnection.getInputStream(); 
      } 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     return stream; 
    } 

    @Override 
    protected void onPostExecute(String output) { 
     outputText.setText(output); 
    } 
}} 

은 서블릿 코드 내 로컬 시스템 (아무 9999 포트가 Tomcat6.0 서버)를 실행 나누었다는 me.Both 시스템이 작동하지 않습니다에있는 시스템의 IP 주소입니다 같은 와이파이 네트워크 어떤 도움이 정말 대단히 감사합니다. 미리 감사드립니다 모두

+0

내가 같은 문제가 무엇입니까위한 서블릿 코드 안드로이드 코드를입니다. – DJhon

+0

http://192.68.0.2:9999/HttpGetServlet/HelloWorldServlet 이 URL에 대해 확실합니까? 이것은 내가 생각하는 Tomcat 질문입니다. – Cruncher

+2

응용 프로그램을 실행하는 컴퓨터에서 http://192.68.0.2:9999/HttpGetServlet/HelloWorldServlet을 방문하고 http : // localhost : 9999/HttpGetServlet/HelloWorldServlet을 방문하면 어떻게됩니까? 192.168이 아니고 포트가 8080이 아닌 것은 확실합니까? – JohnMark13

답변

2

시도해보십시오. 내가 당신을 위해 노력할 것입니다. 이

  protected Integer doInBackground(String... arg0) { 
     /** According with the new StrictGuard policy, running long tasks on the Main UI thread is not possible 
     So creating new thread to create and execute http operations */ 
     new Thread(new Runnable() { 

     @Override 
     public void run() { 
     ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
     postParameters.add(new BasicNameValuePair("username",un.getText().toString())); 
     postParameters.add(new BasicNameValuePair("password",pw.getText().toString())); 

     String response = null; 
     try { 
      response = SimpleHttpClient.executeHttpPost("http://XXX.168.1.X:5555/LoginServlet/loginservlet.do", postParameters); 
      res = response.toString(); 
      System.out.println("response :"+res); 


     } catch (Exception e) {   
     // e.printStackTrace(); 
      errorMsg = e.getMessage(); 
     } 
     } 

     }).start(); 

     /** Inside the new thread we cannot update the main thread 
     So updating the main thread outside the new thread */ 
     try { 

     }catch (Exception e) { 
    error.setText(e.getMessage());  
      // e.printStackTrace(); 
     } 
    return null; 
     } 

지금이 안드로이드

  public class SimpleHttpClient { 
      public static String result=""; 
/** The time it takes for our client to timeout */ 
    public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds 

    /** Single instance of our HttpClient */ 
    private static HttpClient mHttpClient; 

    /** 
    * Get our single instance of our HttpClient object. 
    * 
    * @return an HttpClient object with connection parameters set 
    */ 
    private static HttpClient getHttpClient() { 
     if (mHttpClient == null) { 
      mHttpClient = new DefaultHttpClient(); 
      final HttpParams params = mHttpClient.getParams(); 
      HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT); 
      HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT); 
      ConnManagerParams.setTimeout(params, HTTP_TIMEOUT); 
     } 
     return mHttpClient; 
    } 

    /** 
    * Performs an HTTP Post request to the specified url with the 
    * specified parameters. 
    * 
    * @param url The web address to post the request to 
    * @param postParameters The parameters to send via the request 
    * @return The result of the request 
    * @throws Exception 
    */ 
    public static String executeHttpPost(String url, ArrayList<NameValuePair> postParameters) throws Exception { 
     BufferedReader in = null; 
     try { 
      HttpClient client = getHttpClient(); 
      HttpPost request = new HttpPost(url); 
      UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters); 
      request.setEntity(formEntity); 
      // String str1= request.setEntity(formEntity); 
      System.out.println("actual request"+formEntity); 
      HttpResponse response = client.execute(request); 
      System.out.println("response in class"+response); 
      in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 

      StringBuffer sb = new StringBuffer(""); 
      String line = ""; 
      String NL = System.getProperty("line.separator"); 
      while ((line = in.readLine()) != null) { 
       sb.append(line + NL); 
      } 
      in.close(); 

      result = sb.toString(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
      System.out.println("catch"); 
     } 

     finally { 
      if (in != null) { 
       try { 
        in.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     return result; 
    } 

    /** 
    * Performs an HTTP GET request to the specified url. 
    * 
    * @param url The web address to post the request to 
    * @return The result of the request 
    * @throws Exception 
    */ 
    public static String executeHttpGet(String url) throws Exception { 
     String result=""; 
     BufferedReader in = null; 
     try { 
      HttpClient client = getHttpClient(); 
      HttpGet request = new HttpGet(); 
      request.setURI(new URI(url)); 
      HttpResponse response = client.execute(request); 
      in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 

      StringBuffer sb = new StringBuffer(""); 
      String line = ""; 
      String NL = System.getProperty("line.separator"); 
      while ((line = in.readLine()) != null) { 
       sb.append(line + NL); 
      } 
      in.close(); 

      result = sb.toString(); 

     } 
     catch(Exception e){ 
      e.printStackTrace(); 
      System.out.println("catch2"); 
     } 
     finally { 
      if (in != null) { 
       try { 
        in.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     return result; 
    }} 

또 다른 클래스입니다 그리고 마지막으로이 당신

 public class LoginServlet extends HttpServlet { 

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
      response.setContentType("text/html;charset=UTF-8"); 
      PrintWriter out = response.getWriter(); 
      try { 
      String un,pw; 
      un=request.getParameter("username"); 
      pw=request.getParameter("password"); 
      System.out.println("username :"+un); 
      System.out.println("password :"+pw); 
      if(un.equals("") || pw.equals("")){ 
        out.print("null"); 
      } 
      else if(un.equalsIgnoreCase("hello") && pw.equals("world")) 
      { 

        out.print("success"); 

      } 

      else{ 
        out.print("failed"); 
      } 
      System.out.println("after :"); 
      request.getAttribute("USER"+un); 
      request.getAttribute("PASS"+pw); 
      RequestDispatcher rd=request.getRequestDispatcher("home.jsp"); 
      rd.forward(request, response); 

      }catch(Exception e){ 
        System.out.println("inside exception"); 
        e.printStackTrace(); 
      } 
      finally {    
       out.close(); 
      } 
     } 
    @Override 
     protected void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      service(request, response); 
     } 
    @Override 
     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
      service(request, response); 
     } 
    @Override 
     public String getServletInfo() { 
      return "Short description"; 
    }} 
+0

답변 해 주셔서 감사합니다. 내가 확인 할게. 그럼 내가 너에게 돌아갈거야. –

+0

여기 5555는 서버의 포트 주소 일 뿐이므로 원하는대로 편집 할 수 있습니다. – DJhon

+0

당신은 위대한 사람입니다. 마침내 나는 내 문제를 해결했다. –

관련 문제