2013-07-28 4 views
0

웹 서버에 대한 소켓 연결을 만들려고합니다.서버 소켓으로 클라이언트 요청 수락

import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.ServerSocket; 
import java.net.Socket; 


public class Connection{ 
public final static int PORT = 1337; 

public Connection(){ 
    ServerSocket svrSocket = null; 
    try{ 
     svrSocket = new ServerSocket(PORT); 
     System.out.println("Conected to: " + PORT); 
     Socket con = null; 
     while(true) 
     { 
      try{ 
       con = svrSocket.accept();//on this part the program stops 
       System.out.println("Client request accepted"); 
       PrintWriter out = new PrintWriter(con.getOutputStream()); 

       out.flush(); 
      }catch(IOException ex) 
      { 
       ex.printStackTrace(); 

      } 
     } 
    }catch(IOException ex) 
    { 
     System.err.println(ex); 
     System.out.println("Unable to attach to port"); 
    } 


} 
} 

클라이언트 요청 con = svrSocket.accept();이 실행되지 않습니다. 이 줄 뒤에있는 메시지가 표시되지 않기 때문에 나는 이것을 말한다.

왜 클라이언트 요청을 받아들이지 않고 웹 브라우저를 사용하여 서버를 테스트 할 수 있습니까? 제발 나쁜 프로그래밍 스타일을 용서해주십시오.

감사합니다.

+0

는'svrSocket.accept()가'차단 호출입니다 사용하여 연결합니다. 서버에 연결하기 – Reimeus

답변

1

서버가 연결을 수락 할 수 있도록 서버에 클라이언트를 연결해야합니다. 그러면 코드가 해당 줄에서 대기합니다.

코드 인스턴스를 실행하고 코드가 실행되는 동안이 코드를 컴파일하고 실행하면 포트로 인해 IOException이 발생하는 경우 클라이언트 요청 수락 메시지가 표시되고, 두 포트의 포트를 cmd에서 netstat -o을 호출 할 때 표시되지 않는 포트로 변경하십시오.

import java.io.*; 
import java.net.*; 
public class TestCon 
{ 
    public static void main(String[] args) 
    { 
     Socket echoSocket = null; 
     PrintWriter out = null; 
     BufferedReader in = null; 
     try { 
      echoSocket = new Socket("127.0.0.1", 1337); 
      out = new PrintWriter(echoSocket.getOutputStream(), true); 
      in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); 
      out.println("Hello Server!"); 
      System.out.println(in.readLine()); 
      out.close(); 
      in.close(); 
      echoSocket.close(); 
     } catch (UnknownHostException e) { 
      System.err.println("Host Unknown");System.exit(1); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for the connection.");System.exit(1); 
     } 
    } 
} 
+1

'SERVER_URL'에서 어떤 URL이라도 사용할 수 있습니까? – Jonathan

+2

"localhost"또는 "127.0.0.1"같은 컴퓨터에서이 서버를 실행하는 경우 서버의 URL을 사용해야합니다. – Robadob

+1

암탉 나는 이것을 프로그램으로 추가한다. 나는 포트 80과 URL을 127.0.0.1로 사용한다. 프로그램 정지는 같은 장소에있다. 이 작은 프로그램에서 1337 포트를 사용하면 예외가 발생합니다. (주 :이 프로그램을 작성하고 내가 주 코드에 인스턴스화했습니다.) – Jonathan

0

클라이언트 요청 콘 svrSocket.accept =(); 실행되지 않습니다.

이것은 고객 연결 요청 코드가 아닙니다. 서버은이 포트에서 수신 대기하고 들어오는 연결을받을 때까지 차단합니다. 새로운 클라이언트 프로그램을 만들거나 서버가 시작 될 때까지 기다립니다 새로운 Thread을 시작하고

Socket clientSocket = new Socket ("127.0.0.1", 1337); 
+0

이것을 실행하면 포트 때문에'IOException'이 발생합니다. 포트 80을 사용할 때 실행되지만 이전에 들어오는 연결을 기다리는 곳과 같은 일을합니다. – Jonathan

관련 문제