2013-08-20 1 views
1

현재 Java로 작성된 IRC 클라이언트에서 작업하고 있습니다. 첫 번째 테스트는 꽤 갔다 IRC : No Ident 응답

#chat

  • /NICK 테스트
  • 이/가입 :

    는 즉시 서버에 대한 연결이 설정 될 때 나는이 메시지를 보낼 잘 - 서버가 응답 중입니다. 그러나 모든 시간은 말한다 :

    • 공지 사항 AUTH : ***
    • 행선지
    • 공지 사항 AUTH 확인 : ***
    • 없음 행선지 응답을
    • ERROR : 링크 닫기 ...

    는 I가 related question 발견 (등록 초과)이 H 조금 어슬렁 거리다. 그것은 포트 113에서 IRC-Server로부터 수신하고 응답하기위한 연결 및 메시지를 청취 할 필요가 있다고 말합니다. 그 포트에서 수신 대기하는 ServerSocket을 구현했지만 서버는 포트 113에서 연결을 열려고하지 않습니다. 무엇을 잘못하고 있습니까?

    을 Heres 코드 : 실행에

    import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.io.OutputStreamWriter; 
    import java.net.ServerSocket; 
    import java.net.Socket; 
    
    public class IdentProtocolThread extends Thread { 
    
    private String nick; 
    private ServerSocket serverSocket; 
    private BufferedReader reader; 
    private BufferedWriter writer; 
    
    public IdentProtocolThread(String nick) throws IOException { 
        this.nick = nick; 
    
        this.serverSocket = new ServerSocket(113); 
    } 
    
    @Override 
    public void run() { 
    
        try { 
    
         System.out.println("waiting for incoming socket"); 
         Socket socket = this.serverSocket.accept(); 
    
         System.out.println("socket accepted"); 
         this.initialize(socket); 
         System.out.println("reader/writer initialized"); 
    
         String line = null; 
         while ((line = this.reader.readLine()) != null) { 
          System.out.println(line); 
         } 
    
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        System.out.println("done"); 
    } 
    
    private void initialize(Socket socket) throws IOException { 
        this.reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
        this.writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 
    } 
    } 
    

    난 단지이 얻을 표시 :

    내가 피하기 위해 다른 메시지를 보낼 필요가 있는가 들어오는 소켓을 기다리고 신원 확인?

답변

2

기본 IRC 프로토콜에 대한 참조는 this question을 참조하십시오. 클라이언트에서 보는 데 익숙한 명령어 인 /보다 다소 구조적입니다. << 서버와 >>로 전송 한 줄의 텍스트를 표시

<< USER foo . . :real name 
<< NICK bar 
>> :server PING somethinglonghere 
<< PONG :somethinglonghere 
>> :server 001 bar :Welcome! 
<< JOIN #channel 
>> :[email protected] JOIN #channel 
>> :server 332 bar #channel :channel topic 
>> :server 353 bar = #channel :@someop +somevoice someuser anotheruser 
>> :server 366 bar #channel :End of /NAMES list 

가 서버에서받은 텍스트 행을 나타냅니다 핸드 쉐이크는 종종 다음과 같이 보입니다. 또한 많은 서버가 \n을 받아 들일지라도 IRC는 명목상으로는 \r\n 줄 끝을 사용합니다.

+0

첫 번째 줄 ('USER [email protected] : ytrezq')을 사용하고': morgan.freenode.net 461 * USER : 매개 변수가 충분하지 않습니다. ' – user2284570

+0

그 "foo"에는 사용자가 있고, 마침표는 실제로 인수입니다. 예를 들어, "[email protected]"가 되려면 "사용자 prez. : Zaphod Beeblebrox"다음에 "NICK zaphod" –