2013-08-06 3 views
0

소켓 서버를 만들려고합니다.이 서버에 퍼티를 통해 연결하고 있습니다. 내가 "hi"라고 타이프 할 때마다, 나는 그것을하기를 원하는 "hi"보다 "no"라고 말한다. 나는 이것을 자바 웹 사이트에서 발견했다. 내가 뭘 잘못하고 있는지 말할 수 있다면 좋을 것입니다. 감사!소켓 서버가 제대로 수신되지 않습니다.

int port = 12345; 
ServerSocket sock = new ServerSocket(port); 
System.out.println("Server now active on port: " + port); 

Socket link = sock.accept(); 
System.out.println("Interface accepted request, IP: " + link.getInetAddress()); 

BufferedReader input = new BufferedReader(new InputStreamReader(link.getInputStream())); 
PrintWriter output = new PrintWriter(link.getOutputStream(), true); 

output.println("ISEEYOU"); 
String inputLine; 

Thread.sleep(1500); 

while((inputLine = input.readLine()) != null) { 
    if(inputLine.equals("hi")) { 
     output.println("hi"); 
    }else{ 
     output.println("no"); 
    } 
} 
+0

서버 시스템과 클라이언트 시스템의 줄 끝 ('\ r \ n '또는 다른 것)이 동일합니까? 받은 회선을 인쇄하면 어떻게됩니까? – sje397

+0

@ sje397 라인 엔딩은 중요하지 않습니다.'BufferedReader'는 그들이 무엇인지 신경 쓰지 않습니다. – tbodt

+0

'sleep()'은 말 그대로 시간 낭비입니다. 'readLine()'은 라인이 도착할 때까지 차단 될 것이다. – EJP

답변

1

Java 프로그램이 올바른 것입니다.

코드를 사용해 보았습니다. 루프의 첫 번째 줄에 System.out.printf("[%s]", inputLine); 루프를 추가하여 퍼티에서 얻은 결과를 확인했습니다. 당신의 문제는 퍼티가 연결하는데 사용하는 프로토콜이라고 생각합니다. 그것은 나를 위해 원시와 함께 일했습니다.

PUTTY session settings

편집 : 내가 사용했던 세션 설정 아래 참조 귀하의 코멘트에 따르면 나는 콘솔에서 라인을 읽고 서버로 전송하고를 인쇄하는 간단한 클라이언트에 대한 몇 가지 코드를 추가 콘솔에 에코 백.

public void Client() throws IOException { 
    // Client that closes the communication when the user types "quit" 
    Socket socket = new Socket("localhost", 8080); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    PrintStream ps = new PrintStream(socket.getOutputStream()); 

    BufferedReader user = new BufferedReader(new InputStreamReader(System.in)); 
    String line; 
    while(!(line = user.readLine()).equals("quit")) { 
     ps.println(line); // Write to server 
     System.out.println(reader.readLine()); // Receive echo 
    } 
    socket.shutdownOutput(); // Send EOF to server 
    socket.close(); 
} 

해당 서버는 다음과 같이 보일 것이다 : 8080이 이미 컴퓨터에 바인더 제본 경우

public void server() throws IOException { 
    ServerSocket serverSocket = new ServerSocket(8080); 
    Socket socket = serverSocket.accept(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    PrintStream ps = new PrintStream(socket.getOutputStream()); 

    // Just read a line and echo it till EOF 
    String line; 
    while((line = reader.readLine()) != null) ps.println(line); 
} 

당신은, 내가 여기에 사용되는 포트를 변경해야 할 수도 있습니다. 또한 서버를 다른 컴퓨터에서 실행 한 다음 클라이언트를 실행하고 싶을 수도 있습니다. 이 경우 "localhost"를 변경해야합니다.

+0

감사! : D이 workis. – cheese5505

+0

최근에 연결을 위해 PHP를 사용해야하는 곳을 업그레이드했으며 RAW를 사용할 수 없습니다. 다른 방법으로 할 수 있습니까? – cheese5505

+0

간단한 Java 클라이언트를 작성할 수도 있습니다. 새로운 소켓을 만들고, System.in에서 String을 읽고, 소켓에 쓰고, 소켓에서 읽은 것을 인쇄하십시오. 심지어 서버 코드를 숏컷해야합니다. – jboi

관련 문제