2010-10-27 6 views
7

Acabo de aventurarme a escribir mis primeros programas basados ​​en sockets en Delphi 2010. Intenté con Indy, sin éxito, simplemente escribiendo un cliente y servidor simple que pudiera enviar paquetes. Luego utiliza TTCPServer y TTCPClient, mismos resultados usando las demostraciones siguientes 'simple como se pone': -¿Puedo ejecutar programas usando TCP/IP desde dentro de IDE y esperar que funcionen?

Emmbercadero TTCPServer demo

Emmbercadero TTCPClient demo

me habían disparado hasta 2 instancias del IDE para las aplicaciones de cliente y servidor . Estaba bastante decidido a evitar la vergüenza de publicar una pregunta relacionada con la versión basada en socket de 'helloworld', y acabo de pasar 2 días intentando todo.

Bueno, yo solo decidí tirar la toalla y pedirles ayuda, antes de hacerlo, simplemente ejecuté a los exes de FUERA del IDE ... y sí, ¡funcionaron! Trabajaron todo el tiempo, pero no desde dentro del IDE.

¿Puedo ejecutar estos programas dentro del IDE con éxito? Gracias.

+0

¿Qué problemas tuviste con Indy? Funciona bien cuando se usa correctamente. –

+0

Hola Remy, con lo que sé ahora, no tuve problemas con la propia Indy, simplemente me di por vencido y probé TTCPServer solo para ver si eso funcionaría y tampoco lo hizo, todo parece ser la depuración, no Indy o TTCPServer sí mismos. – csharpdefector

+0

@charpdefector: por favor, defina el pensamiento "do not work". ¿Lanza una excepción? cual excepción? el cliente o el servidor? ¿No ves el puerto abierto en tu máquina pero el servidor indy está activo? o qué diablos pasa ... hay un trillón de posibilidades. Es una buena idea tomarse un tiempo para elaborar su pregunta. – jachguate

Respuesta

1

Gracias por toda su ayuda. Acabo de encontrar la solución a mi problema ...

Hace algún tiempo, instalé una versión de prueba de un programa llamado Diamond Port Explorer que ya había expirado. Cuando estaba tratando de hacer funcionar un simple Indy TIdTCPServer, recibía el error 10146 (o 10106 no recuerdo) que no se pudo inicializar. También me alojé en el registro de eventos de Ide. Se produjo una descarga del módulo en el momento en que traté de establecer TIdTCPServer.Active:= true en dcsws2.dll, que es un dll de Diamond PortExplorer (que en realidad no se estaba ejecutando).

Así que desinstalé Diamond PortExplorer, ¡y ahora no tengo ningún problema!

4

No debería haber problemas desde el IDE. Lo hago todo el tiempo.

Asegúrese de no congelar ningún subproceso en el depurador, ya que el servidor se ejecutará en subprocesos.

+0

Gracias. Sí, estaba empezando a pensar que se trataba de mendigar. Acabo de descubrir que si ctrl-F9 mi servidor (sin puntos de interrupción en cualquier lugar) todavía no funciona, pero si lo ejecuto sin depurador Ctrl-shift-F9, de hecho funciona desde dentro de IDE. ¿Eso concuerda con tu experiencia? – csharpdefector

+0

Actualización, Bueno, mi servidor funciona bien desde IDE sin depurador al menos, pero mi otra instancia IDE para el cliente cuando se ejecuta sin depurador no envía al servidor, lo hacen cuando se ejecuta fuera de IDE. hmmm – csharpdefector

2

Los programas TCP/IP (de tipo Cliente y Servidor) se pueden ejecutar de forma segura desde Delphi IDE.

La única preocupación podría ser acerca de la configuración de FireWall, pero no sería ningún problema permitir que su programa tenga acceso a la red.

Durante la depuración, si realiza paso a paso (claves F7/F8), solo se está ejecutando un subproceso, por lo que no se ejecutará ningún subproceso en segundo plano (como el subproceso Servidor).

Debe ejecutar el Servidor antes de ejecutar el Cliente, por diseño.

Nunca utilicé las clases TTCPClient y TTCPServer, que descubrí que tenían errores ... prueba con otro framework, como Indy, Synapse o nuestro SynCrtSock.

¿Qué versión del Delphi IDE estás ejecutando? ¿En qué sistema operativo?

+0

+1 por mencionar la posibilidad de que un firewall local cause problemas. –

+0

D2010, XP Pro SP2. De hecho, creo que usaré Indy. Sí, ya había considerado el firewall, no creo que sea así, pero lo inhabilitaré por completo y verificaré tres veces. – csharpdefector

0

Tuve problemas similares al implementar un servidor y cliente datasnap. El problema que tuve fue que el DSServer ya se estaba ejecutando y el puerto estaba en uso. Así que asegúrese de verificar todos sus puertos y si sus conexiones están activas en el IDE y también en las aplicaciones en ejecución.

Cuestiones relacionadas