2013-08-23 7 views
0

나는 소켓을 사용하여 바람둥이와 통신을 시도하고 있습니다. HTTP 메시지를 작성하여 outputStream에 쓰고 있습니다. 연결이 성공적으로 설정되었지만 응답이 없습니다. 텔넷을 통해 동일한 메시지를 통해 연결하려고 할 때 응답을받을 수 있습니다. 아래의 코드 스 니펫을 찾고 내가 누락 된 부분을 지적하십시오.소켓을 통해 바람둥이를 연결하십시오.

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

서블릿을 편리하게 붙이기 위해 ... 매우 기본적인 것입니다. 방금 테스트 목적으로 만들었습니다.

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

sir 어디에서 내 프로그램이 중요하지는 않은지, 내가 게시 한 스 니펫은 사실상 매우 정상적으로 시작하고 중지하는 거대한 SWT 애플리케이션의 일부입니다. 아니, 나는 전혀 오류 응답을받지 못한다. BTW 당신의 좋은 도움에 감사드립니다. – Anup

답변

0

write()를 사용해야하는 곳에 writeUTF()를 사용하고 있지만,이 모든 작업을 수행하는 이유는 무엇입니까? HttpURLConnection 또는 HTTP 클라이언트를 사용하지 않는 이유는 무엇입니까? 바퀴를 재발 명하지 마십시오.

+0

제안 해 주셔서 감사합니다. BTW write()도 도움이되지 않으며 writeUTF()는 write() 메소드 만 호출합니다. 사실 그것은 바퀴를 재발견하는 문제가 아니며 인기있는 앱 서버를 소켓을 통해 연결해야하는 곳에서 뭔가를 개발하려고합니다. – Anup

+0

사소한 일이 아닙니다. writeUTF()는 16 비트 길이의 단어를 쓴 다음 데이터를 특수한 형식으로 씁니다. Javadoc을 보라. write()와 같으면 존재하지 않을 것입니다. writeUTF()는 readUTF() 만 이해할 수있는 형식을 쓰고 Tomcat은 요청을 읽을 때 readUTF()를 수행하지 않습니다. 당신이하고있는 일은 실제로 휠을 다시 발명하는 것입니다. 그리고 예를 들어, 요청 매개 변수의 이름이나 값을 인코딩하지 않는 것 같은 충분한 지식이없는 것 같습니다. 더 진행하기 전에 Apache HTTP 클라이언트를 잘 살펴 봐야합니다. – EJP

관련 문제