Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Jeezy en 31 Agosto 2018, 18:56 pm



Título: Se ha detenido la aplicación
Publicado por: Jeezy en 31 Agosto 2018, 18:56 pm
Hola, tengo un problema en mi cliente servidor funciona por sockets y cuando se cierra el servidor se cierra el socket del cliente utilizando el siguiente código
Código:
client.Close();
client.Shutdown(shutdown.Both);

Y cuando se cierra se detiene la aplicación , alguien me podría explicar por que al cerrar la conexion se detiene gracias.


Título: Re: Se ha detenido la aplicación
Publicado por: Eleкtro en 31 Agosto 2018, 19:32 pm
La llamada al método Socket.Shutdown debes efectuarla antes de cerrar el socket...

  • https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.socket.close?view=netframework-4.7.2

Citar
The Close method closes the remote host connection and releases all managed and unmanaged resources associated with the Socket. Upon closing, the Connected property is set to false.

For connection-oriented protocols, it is recommended that you call Shutdown before calling the Close method. This ensures that all data is sent and received on the connected socket before it is closed.

Citar
If you need to call Close without first calling Shutdown, you can ensure that data queued for outgoing transmission will be sent by setting the DontLingerSocket option to false and specifying a non-zero time-out interval. Close will then block until this data is sent or until the specified time-out expires. If you set DontLinger to false and specify a zero time-out interval, Close releases the connection and automatically discards outgoing queued data.

Saludos.


Título: Re: Se ha detenido la aplicación
Publicado por: Jeezy en 1 Septiembre 2018, 02:44 am
Ya hice lo que me dijiste pero me salta excepcion en el client.shutdown

Cannot access a disposed object.

o nose si estoy en lo correcto que cuando se cierre un cliente tambien tengo que cerrar la conexion desde el servidor o solo desde el cliente