2013-08-23 187 views
0

我一直在嘗試使用套接字與tomcat進行通信。我正在形成HTTP消息並將其寫入outputStream。連接成功建立,但我沒有收到任何迴應。當我試圖通過telnet連接的同一條消息能夠得到響應。請找到下面的代碼片段,指出我缺少的東西。通過套接字連接tomcat

   String text1 = text.getText(); 
       String text2 = text_1.getText(); 
       String address = combo.getText(); 
       System.out.println("Text1 =" + text1 + " Text2 = " + text2 + " Address = "+address); 
      try{ 
       StringBuilder builder = new StringBuilder(); 
       Socket socket = new Socket("localhost", 8082); 
       DataOutputStream outToServer = new DataOutputStream(socket.getOutputStream()); 
       BufferedReader inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

       //U need to post actual HTTP MESSAGE HERE 
       StringBuilder requestBuilder = new StringBuilder(); 
       requestBuilder.append("GET").append(SPACE).append(FORWARD_SLASH).append("SayHello").append(FORWARD_SLASH).append("SayHello").append("?") 
       .append("text1=").append(text1).append("&text2=").append(text2).append(NEWLINE)/*.append(SPACE).append("HTTP/1.1").append(NEWLINE) 
       .append("accept").append(COLON).append(SPACE).append("text/plain;").append(SPACE).append("text/html").append(NEWLINE) 
       .append("accept-language").append(COLON).append("en-US").append(NEWLINE) 
       .append("connection").append(COLON).append("keep-alive").append(NEWLINE) 
       .append("host").append(COLON).append("localhost").append(NEWLINE) 
       .append("user-agent").append(COLON).append("MyUCBrowser").append(NEWLINE) 
       .append("content-length").append(COLON).append("0").append(NEWLINE) 
       .append("connection-type").append(COLON).append("text/plain").append(NEWLINE)*/; 

       /*box.setMessage(requestBuilder.toString()); 
       box.open();*/ 
       System.out.println(requestBuilder.toString()); 

       outToServer.writeUTF(requestBuilder.toString()); 
       String tempResp; 
       while ((tempResp = inFromServer.readLine()) != null) { 
        builder.append(tempResp); 
       } 
       System.out.println(builder.toString().length() > 0 ? builder.toString() : "Anup Kalane!!!"); 
       text_2.setText(builder.toString()); 
       socket.close(); 
       display.dispose(); 
      } 
      catch (UnknownHostException ex) { 
       // TODO Auto-generated catch block 
       ex.printStackTrace(); 
      } catch (IOException ex) { 
       // TODO Auto-generated catch block 
       ex.printStackTrace(); 
      } 

爲了方便起見,還附加了servlet ......這是非常基本的一個。我只是爲了測試目的而創建它。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     // TODO Auto-generated method stub 
     String text1 = request.getParameter("text1") != null ? request.getParameter("text1") : "NULL"; 
     String text2 = request.getParameter("text2") != null ? request.getParameter("text2") : "NULL"; 
     System.out.println("Hello"); 
     PrintWriter writer = response.getWriter(); 
     writer.write("<HTML><BODY><H1>HELLO\nText1 = "+text1+"\nText2 = "+text2+"</H1></BODY></HTML>"); 
     writer.close(); 
    } 
+0

在你的代碼中程序停止,或者它以某種方式完成它?另外,如果你刪除所有附加內容併發送一些新行,會發生什麼情況。你會得到一個錯誤迴應?如果沒有,那麼你有更多的根本問題。如果是這樣,慢慢開始添加你的追加,直到它停止工作,並找出爲什麼它打破它。 – xaxxon

+0

先生,我的程序我的目的不重要,我發佈的代碼片段是一個巨大的SWT應用程序的一部分,它實際上正常啓動和停止。不,我根本沒有收到ne錯誤迴應。順便說一句,謝謝你的不錯的幫助。 – Anup

回答

0

你正在使用writeUTF(),你應該使用write(),但你爲什麼要這樣做呢?你爲什麼不使用HttpURLConnection或某種HTTP客戶端?不要重新發明輪子。

+0

感謝您的建議。順便說一句write()也不會幫忙,writeUTF()也只能調用write()方法。事實上,這不是重塑車輪的問題,我們正試圖從我們需要通過套接字連接流行的應用服務器的地方開發一些東西。 – Anup

+0

沒有絲毫。 writeUTF()以特殊格式寫入一個16位長的字,然後寫入數據。看到Javadoc。如果它與write()相同,它將不存在,是嗎? writeUTF()寫入只讀readUTF()可以理解的格式,而Tomcat在讀取請求時不會執行readUTF()。你正在做的是重新發明輪子,顯然沒有足夠的知識去做:例如,你沒有編碼請求參數名稱或值。在繼續進行此操作之前,您應該仔細閱讀Apache HTTP客戶端。 – EJP

相關問題