TCP/IP経由でハードウェアに接続しようとしています。私はVBでこれを非常にスムーズに行い、C#で同じ結果を達成しようとしています。C#:ソケットの問題 - 数秒後に接続されたソケットが切断される
internal Socket connectSocket(IPEndPoint vIPEndPoint)
{
Socket lclSocket = new Socket(vIPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
try
{
lclSocket.Connect(vIPEndPoint);
}
catch (Exception ex)
{
}
if (lclSocket.Connected)
{
string str = receiveResponse(lclSocket);
if (str.Contains(PFCommonVariables.m_strCommandDelimiter))
{
_sockets.Add(vIPEndPoint, lclSocket);
}
else
{
lclSocket.Disconnect(true);
}
}
lclSocket.ReceiveTimeout = RECEIVE_TIMEOUT;
lclSocket.SendTimeout = SEND_TIMEOUT;
return lclSocket;
}
私が言ったように、このコードは、VBのコードとまったく同じであり、そこに私は成功し、接続を維持することができます:
のコードは次のようになります。ここでC#の問題は、私がIPEndPointに行う 'socket.Connect'呼び出しの直後です.ConnectedプロパティはTrueと表示されます。私はWiresharkを通じたデータの送受信が成功したことを確認します。次に、if(lclSocket.Connected)ステートメントにブレークポイントを設定します。最初にここに来ると、ConnectedプロパティはTrueのままです。しかし、何もせずにここで1〜2秒待つと、Connectedプロパティはfalseになります。
したがって、接続は自動的に失われます。その後、私がデバッガをオンにして回線を待つと、WiresharkではPCとハードウェアの間で定期的に多数のキープアライブTCPメッセージが送信されています。私はこれらのことを訴えていませんが、問題の診断に役立つかもしれません...
いいえ、リモートエンドは応答がないか、タイムアウトしているという意味では「ダム」です。 PCは切断通話が終了するまで接続を維持する必要があります。正確に同じVBコードのバージョンは期待どおりに機能し、切断されません。また、切断を示すパケットは送信されていないようです。 – sbenderli