2017-05-18 1 views
0

GET/POST HTML 요청을 받으려면 내 PC에서 서버를 시작하고 싶습니다.Java 서버에서 GET/POST HTTP 요청 받기

import java.awt.Toolkit; 
    import java.io.BufferedReader; 
    import java.io.InputStreamReader; 
    import java.net.ServerSocket; 
    import java.net.Socket; 
    import java.sql.Date; 
    import java.text.SimpleDateFormat; 

    public class SimpleHTTPServer { 

     public static void main(String args[]) throws Exception { 

      final ServerSocket server = new ServerSocket(4000); 
      int number_req = 0; 

      System.out.println("Listening for connection on port 4000 ...."); 
      while (true) { 

       final Socket client = server.accept(); // Accepting connection 
       InputStreamReader isr = new InputStreamReader(client.getInputStream()); 
       BufferedReader reader = new BufferedReader(isr); 
       String line = reader.readLine(); 
       while (!line.isEmpty()) { 
        System.out.println(line); 
        line = reader.readLine(); 
       } 

       // print number of request, date and time 
       Toolkit.getDefaultToolkit().beep(); 
       SimpleDateFormat formatTime = new SimpleDateFormat ("E dd.MM.yyyy 'at' hh:mm:ss a"); 
       Date date = new Date(System.currentTimeMillis()); 
       System.out.println("Number of requests: " + number_req + " \n\tin "+ formatTime.format(date)); 
      } 
     } 
    } 

내 IP로 브라우저 웹에서 HTML 요청을 보내려고 : 포트 같은 :

은 내가 사용하는 자바 코드

http://79.49.72.102:4000 

하지만 난 항상 ERR_CONNECTION_REFUSED를 얻을 수 . localhost : 4000을 사용해 보았습니다. 요청을 받았습니다. 또한 라우터에서 No-IP 및 Setted Port Forwarding을 사용했지만 아무 것도 작동하지 않는 것 같습니다.

뭘해야합니까?

+0

http 프로토콜에 대해 읽은 것이 있습니까? –

+0

다른 문제는 JAVA가 네트워크 IP 주소에 바인딩하도록하는 것입니다. 이 게시물은 도움이 될 수 있습니다 http://stackoverflow.com/questions/32362627/force-rmiservice-to-bind-with-specific-ip-address –

답변

0

서버 79.49.72.102가 HTTP를 사용하여 포트 4000에 연결할 수 없기 때문에 연결이 거부됩니다. 이것은 서버의 방화벽을 통해 구현되는 일반적인 보안 조치입니다.

누가 79.49.72.102를 소유하고 있습니까? 공용 주소처럼 보이므로 4000과 같이 비표준 포트에서 임의로 들어오는 연결을 허용하지 않습니다.

+0

주소 79.49.72.102는 내 네트워크의 주소 예와 같습니다. –

+0

커맨드 라인에서'ping 79.49.72.102'를 먼저 실행하십시오. 'ping'이 작동하면 주소가 유효 함을 의미하고 요청을 차단하는 서버를 의미합니다. 따라서 서버 관리자에게 문의하여 포트에 대한 액세스를여십시오. – thekenobe

+0

"telnet 79.49.72.102 4000" –

0

기본적으로 ServerSocket (포트)은 localhost에만 바인딩됩니다. 시도해보십시오 :

final ServerSocket server = new ServerSocket(4000, 0, null); 
0

사용하려고 시도한 IP 주소가 라우터 IP 인 것으로 보입니다. 인터넷을 통해 서버에 연결하려면 라우터에서 포트 매핑을 만들어야합니다. Like external_port -> local_ip:local_port 귀하의 서버를 실행해야하는 컴퓨터의 local_ip 로컬 IP 및 작성시 local_port4000입니다. 그리고 external port은 원하는 것일 수 있습니다. 포트 매핑 후에는 라우터 ip와 선택한 외부 포트를 사용하여 인터넷을 통해 서버를 사용하게됩니다.

0

DMZ 규칙에 내 서버 pc의 로컬 ID 주소를 추가하는 문제가 해결되었습니다. 모든 것이 잘됩니다.