FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Conexiones TCP abiertas en una computadora
Buenas,
Espero que me puedan ayudar. Tengo una función realizada en Delphi 11 con Windows 10. El problema es que me da error de "Range Check Error". Les pongo la función:
Se que el error se debe por el tipo de dato, pero el record que usa tiene los mismos tipos de datos que indica la documentación de Microsoft. Como esto lo saque de interent de otro foro creo que puede ser que hay algo que no funciona en Delphi 11 y que esto este si funciona si lo pruebo en Delphi 7 (Digo esto porque todos los ejemplos que he encontrado en Interent son algo viejos y exponen que están hechos con Delphi 7). He obviado la parte donde llamo a la función de la DLL "iphlpapi.dll", pero si consideran que falta algo me lo dicen. Saludos, El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#2
|
||||
|
||||
¿Y algo así?
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#3
|
|||
|
|||
El error de "Range Check Error" ocurre cuando se accede a un índice fuera de los límites de un array. En el código que has proporcionado, el error ocurre en la línea donde se accede a recTcpTable.Table[i].dwRemoteAddr. Esto puede suceder si el valor de i es mayor o igual al número de entradas en la tabla recTcpTable.
Para solucionar este error, asegúrate de que el valor de i esté dentro de los límites válidos de la tabla. Puedes hacer esto verificando que i sea menor que recTcpTable.dwNumEntries antes de acceder a recTcpTable.Table[i].dwRemoteAddr. Aquí tienes un ejemplo de cómo puedes realizar esta verificación: Código:
for i := 0 to recTcpTable.dwNumEntries - 1 do begin if (i >= recTcpTable.dwNumEntries) then Break; // Resto del código... end; Pruébalo... |
#4
|
|||
|
|||
Cita:
Si buscas en Internet podrás ver que usan cosas similares, pero solo que está pensado con Delphi 7. He probado cambiar el tipo de dato del record para "dwRemoteAddr" y el error no se da, pero no es lógico dado que la documentación de Microsoft como dije utiliza un DWORD. Este cambio hace que tenga que cambpiar y revisar todo el código. Lo que se me ocurre pensándolo bien es que dwRemoteAddr este guardando una dirección de IPv6 y que que como utilizo todo con IPv4 por eso da el error. Pero ya te digo que no lo se, tendría que buscar la forma de ver que es lo que intenta obtener La validación que dices de poner no la veo lógica, por mas que pueda funcionar, ya que si le dices que el ciclo este entre 0 y el máximo - 1 de la tabla no debería nunca pasarse de la cantidad de items del array. Casimiro, voy a probar con lo que tu me dices, puede que el problema como comente una líneas mas arriba puede ser dado por la versión de IP que quiere obtener y que el tipo de dato no sea el adecuado. Si es así y lo que propones funciona sería una solución y luego vería el tema de las direcciónes de IPv6 Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
#5
|
|||
|
|||
He podido probar las dos opciones que mencionan, tanto lo de Delphi01 como lo de Casimiro y ninguna funciona.
Lo de Delphi01 nunca sucede, no se pasa del máximo de la tabla. Lo que comenta Casimiro he modificado para usar " TCP_TABLE_BASIC_ALL" en la función pero no da resultado, después el resto es todo igual a como lo tengo yo, sacando donde se muestran los datos, pero ese no es el problema porque nunca llega esa parte. Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Cerrar conexiones que quedan abiertas | arantzal | Varios | 4 | 02-05-2007 13:40:45 |
Tu computadora en cualquier computadora | egostar | La Taberna | 2 | 17-03-2007 04:46:40 |
instancias abiertas | muli | Firebird e Interbase | 0 | 07-07-2004 20:48:23 |
Tablas Abiertas | Ulises | Providers | 2 | 02-03-2004 13:50:23 |
Ventanas abiertas | Isaac | Varios | 3 | 11-02-2004 17:44:37 |
|