2012-02-07 19 views
1

私はサーバにtcpメッセージを送り、応答を返そうとしていますが、サーバの応答を読み込もうとすると、プログラムがハングします。どうしたらいいですか?何か間違っていますか?ここでTCP応答の停止

は私のコードです:

TcpClient^ client = gcnew TcpClient("1.1.1.1", 888); 
NetworkStream^ stream = client->GetStream(); 
array<Byte>^data = SE::crypt(key + this->txtUsername->Text + "&" + this->txtPassword->Text + "&" + SE::Serialize("C")); 
stream->Write(data, 0, data->Length); 
data = gcnew array<Byte>(256); 
String^ responseData = String::Empty; 
Int32 bytes = stream->Read(data, 0, data->Length); 
responseData = System::Text::Encoding::ASCII->GetString(data, 0, bytes); 
Console::WriteLine("Received: {0}", responseData); 
client->Close(); 

私のコードは、私がデバッグするときに一時的に停止させます。

Int32 bytes = stream->Read(data, 0, data->Length); 
+0

レスポンスが返されていないように見えます。それ以外の場合は返されます。 – Marlon

答えて

0

吊り全体のデータ - を待って読むの結果である可能性がある>の長さが受信されます。たとえば、data-> Lengthが100で、サーバーが80バイトのみで応答する場合、Readコマンドは他の20バイトが受信されるまでブロックします。

多くのプロトコルでは、応答長を含む固定長ヘッダーがあります。これにより、レシーバは最初に固定長ヘッダを受信し、可変長の別の読み出しを設定してデータの残りの部分を取得することができます。

おそらくWiresharkを使用してIPトラフィックを監視し、応答の長さを確認します。

関連する問題