2009-08-18 6 views
1

IMAP과 텔넷을 사용하여 메일 서버에 연결하고 있습니다. 연결되면받은 편지함의 모든 항목을 읽음으로 표시합니다. 받은 편지함에는 몇 개의 전자 메일 만있는 경우도 있고, 때로는받은 편지함에 수천 개의 전자 메일이있는 경우도 있습니다. 서버에서 응답을 Byte 배열에 저장하고 있지만 Byte 배열의 길이는 고정되어 있습니다. 내 요청을 처리하는 서버가 언제 내 프로그램에서 알 수 있습니까?

Private client As New TcpClient("owa.company.com", 143) 
Private data As [Byte]() 
Private stream As NetworkStream = client.GetStream() 
. 
. some code here generates a response that I want to read 
. 
data = New [Byte](1024) {} 
bytes = stream.Read(data, 0, data.Length) 

그러나 서버의 응답

이 성공적으로 내가 처리 된 각 전자 메일 확인의 한 줄을 얻을 수 있기 때문에 읽기로 표시됩니다 얼마나 많은 이메일에 따라 달라집니다. 응답에는 10 ~ 20 개의 회선 만 포함될 수도 있고 그렇지 않은 경우에는 수천 개의 회선이 포함될 수도 있습니다. 서버 전체에서 응답을받을 수있는 방법이 있습니까? 내 요청을 처리 할 때 서버가 언제 완료되었는지를 알아야 할 것 같지만이 작업을 수행하는 방법을 알지 못합니다.

제 질문은 다음과 같습니다. 내 프로그램에서 서버가 응답 처리를 완료했는지 확인하려면 어떻게합니까?

답변

1

나는 당신이는 NetworkStream의 DataAvailable 속성을 사용할 수 있습니다 믿습니다 (??? 메모리 스트림 문자열 최대 요구 사항에 대한 목록 < 바이트 >가) 끝에

if(stream.CanRead) 
{ 
    do{ 
    bytes = stream.Read(data, 0, data.Length); 
    //append the data read to wherever you want to hold it. 
    someCollectionHoldingTheFullResponse.Add(data); 
    } while(stream.DataAvailable); 
} 

, "someCollectionHoldingTheFullResponse"전체 응답을 개최한다.

0

읽지 않은 메일 수만 확인하는 것이 좋을까요? 읽지 않은 메일이 없으면 모두 읽지 않은 메일로 표시됩니다.

0

article은 TCP를 통해 서버에 통신하는 흥미로운 예제를 제공합니다. While 루프를 사용하여 서버가 전선을 통해 모든 데이터를 전송할 때까지 대기하는 방법을 보여줍니다.

HandleClientComm() 루틴에 집중하십시오. 일부 코드를 사용하고 싶을 수 있습니다.

관련 문제