2012-02-26 18 views
1

Windows 2k8上でvs2010上のlocalhost上でTCPサーバーを稼動しています。私はVS2010を使用して127.0.0.1にクライアントを接続する場合TCPクライアントがループバックで応答を受け取っていません

は、サーバーがコールを取得し、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

+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、あなたのように、データが確実に届くようにすることができます。おそらく、おそらく、reader.Readへのあなたの呼び出しを変更し、メッセージの終わりを見つけるまで読んでください。

+1

ありがとう。以前はそれを見ていなかった。 –

関連する問題