2013-11-01 5 views
1

SslStream을 사용하여 서버에서 응답을 읽으려고합니다. 서버는 Google IMAP이고 Google 설명서에 따라 IMAP 명령을 사용하고 있습니다. 나는 AuthenticateAsClient 방법을 사용할 때C#에서 SslStream 읽기 메서드가 응답하지 않음

처음이 작품, 난 아무 문제없이 서버의 응답 읽을 수 있습니다 : 다시 같은 읽기 방법을 사용하려고 할 때, 그러나

SslStream.Read(responseStreamBuffer, 0, responseStreamBuffer.Length); 

을 이 오류가 나타납니다. 전송 연결에서 데이터를 읽을 수 없습니다 : 연결된 당사자가 일정 기간 후에 제대로 응답하지 않았거나 연결된 호스트가 응답하지 않아 stablished 연결이 실패하여 연결 시도가 실패했습니다.

나머지 코드는 완벽하게 작동하지만 스트림에서 처음 읽은 후 코드가 작동합니다. 예외 처리를 위해 catch 구조체가 있는데, 여기에서 정확한 오류가 발생했습니다.

본질적으로 서버는 SslStream.Write 메서드를 사용하여 보내는 명령을 가져 오지만 이후의 Read 메서드 호출은 위의 예외와 함께 거부됩니다.

나는 내가 얻을 수있는 도움에 대해 대단히 감사 할 것입니다.

감사합니다. Shay Rosenfeld.

+1

더 많은 코드를 보여주십시오. – CodesInChaos

+0

[disposing] (http://msdn.microsoft.com/en-us/library/system)?idisposable.dispose.aspx) 당신이 그것을 끝내고 나면 스트림? – Mike

답변

2

좋아, 그래서 조금 파고 상자 밖에서 생각하기로 결정했습니다. 유일한 문제는 두 번째 읽기 때문에 내 코드가 잘되어야한다는 것을 알았습니다.

그래서 문제는 C#이 아니라 IMAP 프로토콜 (또는 적어도 내가 처리하고 있었던 방식)과 관련이 있습니다. 지금까지 필자가 발견 한 것처럼, Write 메서드를 사용하는 경우, Amy 종류의 NetworkStream을 사용할 때 Read 메서드를 사용해야합니다. SslStream은 Read와 Write 만 있고 ReadLine이나 Writeline 메서드는 없으므로 다른 것들과 아무런 문제가 없었습니다.

그런 다음 POP3 프로토콜과 관련된 비슷한 주제에 관한 질문을 보았습니다. 명령을 보낼 때 명령 자체를 보냈습니다. tag login user pass. 그러나, 나에게 알려지지 않은 명령은 명령을 끝내지 않은 서버에 대해서만 successfuly를 보냈다. 분명히 문제는 IAMP 프로토콜이 아니 었습니다. (똑똑한 사람들이 발명 한 것보다 똑똑했습니다.) 그것은 내 명령이 아니라 내 명령이었습니다. 즉, 내 명령 끝에 "\ r \ n"을 넣어야 서버에 명령의 끝임을 알릴 수 있습니다 (예 : tag LOGIN user pass\r\n). 그 후, 그것은 매력처럼 작동했습니다. 이제는 내 앱에 대한 보안 IMAP 처리 클래스를 빌드하기 만하면됩니다.

관심이있는 경우, 초안 코드 (현재 진행중인 내용)와 내가 끝나면 아마도 라이브러리를 업로드 할 예정입니다. 나는 자연스러운 형태로 C#을 사용하는 것을 좋아하고 매번 저에게 도전하기 때문에 항상 외부 라이브러리를 사용하지 않습니다. 물론, 항상 가능하지는 않지만, 성공할 때 나는 성공의 성취감을 느낄 수 있고, 나 자신을 더 나은 프로그래머로 만들 수 있습니다.

내 질문을보고 도움을 주신 모든 분들께 감사드립니다. 우리 같은 사람들에게 감사 드리며, 머리카락을 없애지 않고 프로그래밍을 계속할 수 있습니다.

해피 할로윈 전체!

감사합니다. Shay Rosenfeld.