2012-02-26 100 views
1

我有一個TCP服務器啓動並運行在windows 2k8上的vs2010上的本地主機上。TCP客戶端沒有收到環迴響應

當我連接在客戶端上使用VS2010 127.0.0.1,服務器獲取的電話,(我可以看到它 從調試)作爲TCP服務器執行命令行協議處理程序,但該客戶端 收到服務器響應,這是會話密鑰,但在讀取 響應流時阻塞客戶端。

當我在同一個端口的環回使用Telnet時,發送相同的命令序列, 響應,即會話密鑰,被瞬間接收。

下面是客戶端代碼:

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 2012-02-26 00:59:37

+0

你錯過了很多關於這個問題的信息。可能有十幾個變量導致您的遺漏迴應。我們如何猜測? – Jason 2012-02-26 02:04:33

+0

是的,那就是我想的。我會發布客戶端代碼。 – 2012-02-26 13:41:33

回答

3

爲了使這項工作,請您用的WriteLine寫爲顯示在下面的代碼:

Console.WriteLine("Sent Command"); 

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

試圖將兩者都設置爲WriteLine。客戶端坐着等待。刷新肯定會將緩衝流寫入通道。 – 2012-03-01 15:06:25

+0

我下載了TCPIP構建器,服務器正常工作。你推薦任何.NET TCP/P套接字客戶端的例子嗎? – 2012-03-01 15:30:24

+0

我創建了一個使用TcpClient類的客戶端,它工作正常。服務器正在工作併發送正確的會話響應。 – 2012-03-01 16:07:56

2

Enable network tracing,所以你可以確定數據正在調用。它可能是,所以改變你的電話給讀者。閱讀並閱讀,直到你找到消息的結尾。

+1

謝謝你。以前沒見過。 – 2012-03-02 00:27:20