2012-02-26 3 views
1

Windows 2k8에서 vs2010의 localhost에서 TCP 서버를 실행 중입니다. 내가 VS2010를 사용하여 127.0.0.1에서 클라이언트를 연결하면TCP 클라이언트가 루프백에서 응답을받지 못합니다.

는 서버가 전화를 가져옵니다는 TCP 서버가 명령 행 프로토콜 핸들러를 실행으로 (I 디버그에서 를 볼 수 있습니다)하지만, 클라이언트는 서버받을 을한다 응답은 세션 키이지만 클라이언트에서 회신 스트림 인 을 읽을 때 차단됩니다.

동일한 명령 시퀀스를 보내는 텔넷을 루프백에서 사용할 때 응답, 즉 세션 키가 즉각적으로 수신됩니다. 여기

클라이언트 코드 :

EndPoint serverAddress = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9121); 
sing (Socket socket = new Socket(serverAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp)) 
      { 

       socket.Connect(serverAddress); 

       var socketStream = new NetworkStream(socket); 
       var reader = new StreamReader(socketStream, Encoding.ASCII, false); 
       var writer = new StreamWriter(socketStream, Encoding.ASCII, 1024); 

       string charSource = Guid.NewGuid().ToString().Replace("-", string.Empty) 
        + Guid.NewGuid().ToString().Replace("-", string.Empty) 
        + Guid.NewGuid().ToString().Replace("-", string.Empty); 

       Random rd = new Random(); 


       int startPos = rd.Next(0, charSource.Length - 2); 
       int endPos = rd.Next(startPos + 1, charSource.Length - 1); 

       var currentMessage = charSource.Substring(startPos, endPos - startPos + 1); 

       Console.WriteLine("Sent Command"); 

       writer.Write("HEAR {0} {1}", currentMessage.Length.ToString().PadLeft(4, '0'), currentMessage); 
       writer.Flush(); 

       Console.WriteLine("Reading Command Results"); 
       var line = reader.ReadLine(); 
       Console.WriteLine("Received: " + line); 
      } 

+2

우리는 결코 대답 할 수 없습니다. 그러나 관련 코드를 표시 할 수 있습니다. – nos

+0

질문에 많은 정보가 누락되었습니다. 누락 된 응답에 기여하는 수십 가지 변수가있을 수 있습니다. 우리는 어떻게 추측 할 수 있습니까? – Jason

+0

네, 그게 내가 생각한 것입니다. 나는 클라이언트 코드를 게시 할 것이다. –

답변

3

아래의 코드와 같이이 작업을하려면를 WriteLine와 쓰기를 변경하십시오 :

Console.WriteLine("Sent Command"); 

writer.WriteLine("HEAR {0} {1}", currentMessage.Length.ToString().PadLeft(4, '0'), currentMessage); 
writer.Flush(); 
+0

둘 다 WriteLine으로 설정하려고했습니다. 클라이언트가 앉아 기다립니다. 확실히 플러시는 버퍼 스트림을 채널에 씁니다. –

+0

TCPIP 빌더를 다운로드했으며 서버가 정상적으로 작동합니다. 모든 예제 .NET TCP/P 소켓 클라이언트를 권장합니다. –

+0

잘 작동하는 TcpClient 클래스를 사용하여 클라이언트를 만들었습니다. 서버가 작동하고 올바른 세션 응답을 보냅니다. –

2

Enable network tracing, 당신 때문에 데이터가 전송되고 있는지 확인할 수 있습니다. 아마도 리더기에 전화를 바꿔야합니다. 메시지가 끝날 때까지 읽고 읽고 읽으십시오.

+1

고마워요. 전에는 보지 못했습니다. –

관련 문제