Gå til innhold

Anbefalte innlegg

Hei

Jeg har et lite problem som jeg lurer på om noen har vært borti tidligere.

 

Hver gang jeg prøver å stenge en socket så får jeg

ObjectDisposedException

 

Socketen befinner seg i en annen klasse som jeg kaller opp, med public start og disconnect av socket.

 

Det virker til at problemet kommer idet disconnect funksjonen min kjører Socket.Close().

Og Socket.Shutdown(Socketshutdown.both) har blitt kjørt før Close()...

 

Kan det være lurere å prøve å gjøre hele socketclassen på en annen thread?

Synes det er litt knotete ved å kjøre den på en annen thread iom at jeg gjerne vil sende variabler til socket classen og kjøre beginSend etter at jeg har startet den.

Lenke til kommentar
Videoannonse
Annonse

Vanskelig å si/forstå akkurat hva som er galt uten å i det minste se litt kode, men det høres jo i utgangspunktet ikke ut som om du har et problem. Hvis du bare skal lukke en connection, og den allerede er lukket, så trenger du jo ikke gjøre noe :) Sjekk state før du velger å kalle close/dispose.

 

Kanskje ikke det beste svaret jeg har forfattet - mulig du kan forklare litt mer hva problemet egentlig er. Poste litt kode som en gist eller noe..

Endret av torbjørn marø
Lenke til kommentar

        public void connect(IPEndPoint remoteAddr)
       {
           try
           {
               if (GetCSocket == null)
               {
                   getRemoteAddr = remoteAddr;

                   GetCSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                   GetCSocket.LingerState = new System.Net.Sockets.LingerOption(false, 0);

                   GetCSocket.BeginConnect(getRemoteAddr, getConnectCallback, GetCSocket);
               }
           }
           catch
           {

           }
       }

Dette er funksjonen som starter tilkoblingen av socketen, så lar jeg programmet sende og motta data, men når jeg prøver å bruke shutdown og close, så får jeg ObjectDisposeException.

 

Serveren som tar imote stenger og disposer connection så fort den har sendt fra seg svar.

 

Er et stort problem fordi programmet prøver å tilkoble til serveren gjennom samme socket ved neste tilkobling, og jeg får ikke disposet den.

 

            try
           {
               if (GetCSocket != null)
               {
                   GetCSocket.Shutdown(SocketShutdown.Both);
                   GetCSocket.Close(); // virker som det er her det feiler

                   GetCSocket = null;
               }
           }
           catch (ObjectDisposedException ex)
           {
               System.Windows.Forms.MessageBox.Show(ex.Message.ToString());
           }

Lenke til kommentar

Tror fortsatt ikke jeg skjønner helt. Men du sier programmet skal gjenbruke en lukket socket? Fra http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.shutdown.aspx:

 

Call the Close method to free all managed and unmanaged resources associated with the Socket. Do not attempt to reuse the Socket after closing.

 

PS: Og det jeg forsøkte å si tidligere var at hvis du får ObjectDisposedException så betyr det at socketen allerede er disposet, så da trenger du ikke gjøre noe!

 

PPS: Er ingen socket-ekspert.., kanskje noen andre har en idé?

Endret av torbjørn marø
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...