TCP响应停止

  • 本文关键字:响应 TCP 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 );

挂起可能是Read等待接收整个数据->Length的结果。例如,如果data->Length为100,并且服务器仅用80个字节进行响应,则Read命令将阻塞,直到接收到其他20个字节为止。

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

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

最新更新