¿Cómo se puede verificar si un socket sin bloqueo se desconecta sin usar Poll?C# ¿Verifica si el enchufe está desconectado?
Respuesta
crear una clase toma clases de .NET toma cusomt heredar:
public delegate void SocketEventHandler(Socket socket);
public class CustomSocket : Socket
{
private readonly Timer timer;
private const int INTERVAL = 1000;
public CustomSocket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
: base(addressFamily, socketType, protocolType)
{
timer = new Timer { Interval = INTERVAL };
timer.Tick += TimerTick;
}
public CustomSocket(SocketInformation socketInformation)
: base(socketInformation)
{
timer = new Timer { Interval = INTERVAL };
timer.Tick += TimerTick;
}
private readonly List<SocketEventHandler> onCloseHandlers = new List<SocketEventHandler>();
public event SocketEventHandler SocketClosed
{
add { onCloseHandlers.Add(value); }
remove { onCloseHandlers.Remove(value); }
}
public bool EventsEnabled
{
set
{
if(value)
timer.Start();
else
timer.Stop();
}
}
private void TimerTick(object sender, EventArgs e)
{
if (!Connected)
{
foreach (var socketEventHandler in onCloseHandlers)
socketEventHandler.Invoke(this);
EventsEnabled = false;
}
}
// Hiding base connected property
public new bool Connected
{
get
{
bool part1 = Poll(1000, SelectMode.SelectRead);
bool part2 = (Available == 0);
if (part1 & part2)
return false;
else
return true;
}
}
}
luego usarlo como esto:
var socket = new CustomSocket(
//parameters
);
socket.SocketClosed += socket_SocketClosed;
socket.EventsEnabled = true;
void socket_SocketClosed(Socket socket)
{
// do what you want
}
acabo en marcha un evento de cierre del zócalo en cada toma. por lo que su aplicación debe registrar controladores de eventos para este evento. entonces el zócalo informará a su aplicación si fue cerrado;)
si hubo algún problema con el código, infórmeme.
La clase Socket
tiene una propiedad Connected
. De acuerdo con MSDN, la llamada para verificar no es bloqueante. ¿No es esto lo que estás buscando?
esta es la solución de sondeo –
La propiedad Connected siempre parece ser cierta a menos que desconecte el Socket por mi cuenta. Acabo de verificar y, aunque el servidor remoto desconectó el socket, sigue siendo verdadero. – Will
- 1. ¿Cómo verificar si un socket está conectado/desconectado en C#?
- 2. ¿Verifica si un NSMutableDictionary está vacío?
- 3. Compruebe si un usuario está desconectado en el dispositivo
- 4. Verifica programáticamente si se está ejecutando syncdb
- 5. verifica si largeAddressAware está en efecto?
- 6. ¿Verifica si el usuario está desplazándose con el panel táctil?
- 7. ¿Cómo verifica si la lista está en blanco?
- 8. ¿Cómo se verifica si un repositorio mercurial está limpio?
- 9. ¿Cómo verifica si un archivo está abierto usando Perl?
- 10. ¿Cómo verifica si una fila está bloqueada para la actualización?
- 11. ¿Verifica si se está ejecutando un servicio de Windows?
- 12. ¿Verifica si ya está cargada una biblioteca dll? (Java)
- 13. ¿Verifica si TextBox está vacío y devuelve MessageBox?
- 14. ¿Verifica si se está presionando una determinada tecla?
- 15. Verifica si el valor entero ha aumentado?
- 16. Enchufe C: ¿envía esperar a que termine el recv?
- 17. C++: ¿cómo puedo verificar si el buffer cin está vacío?
- 18. ¿Cómo verifica si un sitio web está en línea en C#?
- 19. python. ¿Puedo verificar si el Servidor SMTP está desconectado (para que pueda volver a conectarme?)
- 20. Detectando el estado de la red (conectado - desconectado) en C#
- 21. ¿Cómo resolver las dependencias de Apache Ivy cuando está desconectado/desconectado?
- 22. Magento - ¿Verifica si hay un módulo instalado?
- 23. Verifica si la sesión está configurada o no, y si no creas una?
- 24. Cliente desconectado
- 25. PHP: ¿verifica si la URL redirige?
- 26. ¿Qué significa enjuagar un enchufe?
- 27. ¿Verifica si PHP está instalado en Apache o en el Servidor IIS?
- 28. Detectar si el monitor está en C#
- 29. C++ averiguar si el depurador está conectado
- 30. Verifica si existe proc almacenado en DB?
Socket.Connected no es posible – Will
new Propiedad conectada implementada en Custom Class. pruébalo, funcionará. –
El método de encuesta no funciona en Linux. Incluso cuando el socket esté cerrado continuará devolviendo false. Es por eso que estoy buscando un camino sin usar la encuesta. – Will