我无法共享服务器代码,因为它托管在我也无法访问也未记录的加密设备中。
在这种情况下,我正在通过循环内的套接字向加密设备发送命令。加密设备处理套接字命令,并在成功后将命令转发给打印机。
场景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条命令时,都不要关闭并打开套接字。如果我在循环中的每次迭代之后都睡不着觉,它也将按预期工作。这使我相信这与我缺乏知识而不是他们的设备有关。
我对套接字编程还很陌生,是否是我的客户端无法正确理解导致此行为的某些东西?