문제

사용 a StreamWriter a NetworkStream, a StreamReader 응답을 읽으려면. 앱은 뉴스 서버에 명령 및 응답을 읽고 있습니다.

단순화 된 코드 (SANS 오류 처리 등) :

tcpClient = new TcpClient();
tcpClient.Connect(Name, Port);

networkStream = tcpClient.GetStream();
serverReader = new StreamReader(networkStream, Encoding.Default);
serverWriter = new StreamWriter(networkStream, Encoding.ASCII) {
                     AutoFlush = true
                   };

// reads the server's response to the connect:  "200 news.newsserver.com"
// commenting out these lines doesn't solve the problem
while (serverReader.Peek() > -1) {
    serverReader.ReadLine();
}

serverWriter.WriteLine("authinfo user username");

// expect response "381 more authentication required", but code just blocks
string response = serverReader.ReadLine();

코드는 그 마지막 줄에서 차단되며 아마도 네트워크 스트림이 응답을 보내기를 기다리고있을 것입니다.

타임 아웃 루프를 사용하여 앱을 걸지 않아도됩니다. serverReader.Peek(), 그러나 나는 항상 시간 초과 할 것입니다. 나는 결코 응답을 얻지 못한다.

서버에 텔넷을 텔넷에 직접 포트하고 명령을 입력하면 즉각적인 응답이 나타납니다.

내가 전화하면 serverWriter.Flush() 명시 적으로 사용하는 대신 AutoFlush 속성, 나는 여전히 차단하고 응답을 얻지 못합니다.

이 접근법을 사용하여 서버에 대한 응답을받지 못하는 이유는 무엇입니까?

감사!

해결 :

위의 코드 하다 나를 위해 일하면서, 나는 다시 돌아가서 해당 코드를 작동하지 않는 코드로 만들었습니다.

매달려있는 코드에서는 여전히 serverReader.peek ()와 함께 타임 아웃 루프를 사용하고있었습니다. 버퍼에 읽을 데이터가 있지만 Peek ()는 항상 -1을 반환합니다 !! Peek () 루프를 Blocking Call to Readline ()로 교체하면 내 문제가 해결됩니다.

앱이 멀티 스레드이었고 차단하고 싶지 않았기 때문에 원래 타임 아웃 루프를 넣었습니다. 이 문제를 다시 방문하고 peek ()를 사용하지 않고 스레드 타이밍을 어떻게 해결할 수 있는지 확인해야합니다.

감사합니다, 좋은 답변!

도움이 되었습니까?

해결책 3

위의 코드 하다 나를 위해 일하면서, 나는 다시 돌아가서 해당 코드를 작동하지 않는 코드로 만들었습니다.

매달려있는 코드에서는 여전히 serverReader.peek ()와 함께 타임 아웃 루프를 사용하고있었습니다. 버퍼에 읽을 데이터가 있지만 Peek ()는 항상 -1을 반환합니다 !! Peek () 루프를 Blocking Call to Readline ()로 교체하면 내 문제가 해결됩니다.

앱이 멀티 스레드이었고 차단하고 싶지 않았기 때문에 원래 타임 아웃 루프를 넣었습니다. 이 문제를 다시 방문하고 peek ()를 사용하지 않고 스레드 타이밍을 어떻게 해결할 수 있는지 확인해야합니다.

감사합니다, 좋은 답변!

다른 팁

나는 그것이 의심 스럽다 StreamWriter 그것은 문제입니다 ... 그러나 간단한 방법을 찾는 방법이 있습니다. 다운로드 Wireshark 그리고 무엇이 있는지 확인하십시오 실제로 네트워크로오고 있습니다. 그것은 지금까지 무슨 일이 일어나고 있는지 알아내는 가장 간단한 방법입니다.

"AuthInfo 사용자 사용자 이름 r n"을 시도하십시오. RFC는 NNTP 명령 줄을 CR-LF에 의해 종료해야한다고 말합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top