为什么打开和关闭套接字会导致数据丢失?

时间:2018-08-28 22:49:34

标签: c# sockets tcpclient

我无法共享服务器代码,因为它托管在我也无法访问也未记录的加密设备中。

在这种情况下,我正在通过循环内的套接字向加密设备发送命令。加密设备处理套接字命令,并在成功后将命令转发给打印机。

场景1

for (int i = 1; i <= 10; i++)
{
     // Step 1. Initialize TcpClient stream
     m_client = new TcpClient();
     m_client.Client.ExclusiveAddressUse = false;
     m_client.ReceiveTimeout = 20000;
     m_client.SendTimeout = 20000;
     m_client.Connect(SrmIp, Port); 
     m_stream = new SslStream(m_client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);
     m_stream.AuthenticateAsClient("MEV", null, SslProtocols.Tls, false);


     // Step 2. Write data command
     m_stream.Write(aTaille, 0, aTaille.Length);
     m_stream.Write(SrmCheckData, 0, SrmCheckData.Length);

     // Step 3. Receive the status response from the encryption device
     int status = ReceiveReturnCode(true);
     if (status != 2)
          throw new Exception("Encryption Error");

     // Step 4.Close the stream
     m_stream.Close();
}

在上述方案1 中,我没有收到任何流错误。据记录,如果命令已成功处理,设备将发送回 2 。在第3步中,我检查了此内容,但从未收到异常,这表明该设备已收到我命令的所有 10

我的问题是,该设备似乎仅能完全处理10个命令中的5个。其中只有一半被转发给打印机。

如果我将所有内容都移到了循环之外,并且每次设备都无法完全处理所有10条命令时,都不要关闭并打开套接字。如果我在循环中的每次迭代之后都睡不着觉,它也将按预期工作。这使我相信这与我缺乏知识而不是他们的设备有关。

我对套接字编程还很陌生,是否是我的客户端无法正确理解导致此行为的某些东西?

0 个答案:

没有答案