Socket
( ) を使用Socket A = new Socket...
して送受信しています。- 何かベッドが発生したとき (切断)、古いオブジェクトを閉じたり破棄したりしてから、新しいソケット (
A = new Socket...
) をインスタンス化しようとしています (同じホスト/ポート) - フェーズは
connect()
正常にチェックアウトされ、リモート ホストは接続を認識します。 - 最初のバイトを送信しようとすると、すぐに次のようになります。
System.ObjectDisposedException: 破棄されたオブジェクトにアクセスできません。オブジェクト名: 'System.Net.Sockets.Socket'。System.Net.Sockets.Socket.Send (Byte[] バッファー、Int32 オフセット、Int32 サイズ、SocketFlags socketFlags、SocketError& errorCode) で System.Net.Sockets.Socket.Send (Byte[] バッファー、Int32 オフセット、Int32 サイズ、 System.Net.Sockets.Socket.Send(Byte[] buffer) の SocketFlags socketFlags)
何か案は?
try
{
CCMSocket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.NoDelay, true);
CCMSocket.Connect(CCMServer, CCMPort);
}
ここで、ソケットを操作するときに、catch 句が をキャッチしSocketException
、reconnect メソッドを呼び出します。
try
{
//Verify the the socket is actually disconnected
byte[] Empty = new byte[0];
CCMSocket.Send(Empty);
}
catch (Exception ex)
{
bool connected = false;
int reconnectCounter = 0;
do
{
reconnectCounter++;
Disconnect(); //<-- Just CCMSocket.Disconnect(true) in a try/catch
if (Connect(CCMServer, CCMPort)) // <-- method given above
{
connected = true;
CCMSocket.Send(LoginData); // this fails
}
} while (!connected);
}