TCP响应暂停

时间:2012-02-07 21:20:33

标签: c++ c++-cli

我正在尝试向服务器发送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 );

1 个答案:

答案 0 :(得分:0)

挂起可能是Read等待整个数据的结果 - &gt;要接收的长度。例如,如果data-&gt; Length为100且服务器仅响应80个字节,则Read命令将阻塞,直到收到其他20个字节。

在许多协议中,有一个包含响应长度的固定长度标头。这允许接收器首先接收固定长度的头,然后设置另一个可变长度的读取以获得剩余的数据。

也许使用Wireshark来监控IP流量并验证响应长度。