2013-02-25 4 views
0

Ti.Network.TCPSocket을 사용하여 IMAP 서버에 로그인하려고합니다.Ti.Network.TCPSocket 아무것도 반환하지 않습니다

디버깅에 아무 것도받지 못하는만큼 어렵습니다. 예 :

var socket = Ti.Network.createTCPSocket("imap.gmail.com", 993); 
socket.connect(); 
socket.write("LOGIN user pass\r\n"); 

//event handlers 
socket.onWrite(function(data) { 
     Ti.API.debug('Written to socket: '+data); 
}); 

socket.onError(function(data) { 
     Ti.API.debug(data); 
}); 

나는 아무것도 돌려받지 못합니다. 오류 또는 일종의 코드 또는 인식이 실제로 일어나고있는 것은 아닙니다.

여기 뭔가 잘못 되었나요?

이러한 짝수 처리기를 작동 시키거나 소켓에서 어떤 종류의 메시지를 반환하려면 어떻게해야합니까?

도움을 주시면 감사하겠습니다.

UPDATE - 전체 코드

Ti.API.debug('Start A socket Connection'); 
var socket = Ti.Network.createTCPSocket("imap.gmail.com", 993); 

Ti.API.debug('Connect the socket'); 
socket.connect(); 

Ti.API.debug('Socket Connected'); 
var command = uniqueid()+" LOGIN USER PASS\r\n"; 
socket.write(command); 

//this is where the debug stops. No echo. 
Ti.API.debug('Command Run'); 

socket.onWrite(function(data) { 
    Ti.API.debug('Written to socket: '+data); 
}); 

socket.onError(function(data) { 
    Ti.API.debug('Error: '+data); 
}); 

socket.onReadComplete(function(data) { 
    Ti.API.debug('Here: '+data); 
}); 

function uniqueid() { 
    var s = []; 
    var hexDigits = "abcdef"; 
    for (var i = 0; i < 10; i++) { 
     s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); 
    } 
    s[14] = "4"; 
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); 
    s[8] = s[13] = s[18] = s[23]; 

    var uuid = s.join(""); 
    return uuid; 
} 

답변

0

포트 993는 SSL을 통한 IMAP을위한 것입니다.

+0

예 ...... –

+0

PHP로 잘 할 수 있는데 왜 TCP 네트워크 기능이 없습니까? 왜 아무 것도 볼 수 없습니까? –

+0

서버가 SSL 연결을 협상하기를 기다리고 있으므로 아무 것도 표시되지 않습니다. 그렇게 할 코드가 없습니다. (IMAP 프로토콜 (http://james.apache.org/server/rfclist/imap4/rfc2060.txt)과 일치하지 않기 때문에 당신이 원한다고해도 여전히 명령에 대한 응답을 얻지 못할 것입니다. , 2.2 절. * 클라이언트와 서버에 의해 전송 된 모든 상호 작용은 줄의 형태, 즉 CRLF *로 끝나는 문자열이다.) –

0
  • onWrite가 존재하지 않습니다. 이것은 버그이며, 아마도 디버그 문이 멈춘 이유 일 것입니다.
  • 핸들러를 정의한 후 socket.connect()를 이동하십시오.
  • 간격을 사용하고 소켓에 쓰기를 시도하기 전에 socket.isClosed()를 사용하십시오. socket.isClosed() == false를 얻은 다음 계속 진행하십시오. 소켓을 가지고 있으면 응용 프로그램의 webinspector 콘솔에서도이 소켓을 사용할 수 있습니다.

이렇게해도 문제가 해결되지는 않지만 도움이 될 수 있습니다. wireshark와 같은 유틸리티를 사용하여 socket.write를 할 때 전선을 정확히 전송하는지 확인하고 이메일 클라이언트가 전송 한 것과 비교해 볼 수 있습니다.