2010-10-27 5 views
7

Mi sono appena azzardato a scrivere i miei primi programmi basati su socket in Delphi 2010. Ho provato con Indy, senza successo, scrivendo solo un semplice client e server che poteva inviare pacchetti. Poi ho usato TTCPServer e TTCPClient, stessi risultati utilizzando i seguenti demo 'semplice come si arriva': -Posso eseguire programmi usando TCP/IP dall'interno di IDE e aspetto che funzionino?

Emmbercadero TTCPServer demo

Emmbercadero TTCPClient demo

avevo sparato su 2 istanze del IDE per le applicazioni client e server . Ero abbastanza determinato ad evitare la vergogna di pubblicare una domanda relativa alla versione basata su socket di "helloworld", e ho appena trascorso 2 giorni a provare tutto.

Beh, ho appena deciso di buttare l'asciugamano e chiedere a voi ragazzi di aiutarvi, prima di farlo, ho solo gestito gli ex da ESTERNO dell'IDE ... e sì, hanno funzionato! Hanno lavorato tutto il tempo, ma non dall'interno dell'IDE.

Posso eseguire questi programmi all'interno dell'IDE con successo? Grazie.

+0

Quali problemi hai avuto con Indy? Funziona bene se usato correttamente. –

+0

Ciao Remy, io so quello che so adesso, non ho avuto problemi con Indy stessa, ho appena rinunciato e ho provato TTCPServer solo per vedere se funzionasse e non lo fosse - tutto questo sembra essere in fase di debug, non con Indy o TTCPServer loro stessi. – csharpdefector

+0

@charpdefector: si prega di definire "non funziona". fa un'eccezione? quale eccezione? il client o il server? non vedi la porta aperta sulla tua macchina ma il server indy è attivo? o che cosa diavolo succede ... ci sono una possibilità in più. È una buona idea prendersi un po 'di tempo per elaborare la tua domanda. – jachguate

risposta

1

Grazie per tutto il vostro aiuto. Ho appena trovato la soluzione al mio problema ...

Ho avuto qualche tempo fa installato una versione di prova di un programma chiamato Diamond Port Explorer che era scaduto da allora. Quando stavo cercando di far funzionare un semplice Indy TIdTCPServer, ricevevo l'errore 10146 (o 10106 non ricordo) che era "non riuscito a inizializzare". Ho anche notato il log degli eventi di Ide che si è verificato uno scaricamento del modulo nel punto in cui ho tentato di impostare TIdTCPServer.Active:= true su dcsws2.dll - che è una dll di Diamond PortExplorer (che in realtà non era in esecuzione).

Così ho disinstallato Diamond PortExplorer e ora non ho problemi!

4

Non ci dovrebbero essere problemi dall'interno dell'IDE. Lo faccio tutto il tempo.

Assicurarsi di non bloccare alcun thread nel debugger, poiché il server verrà eseguito nei thread.

+0

Grazie. Sì, stavo iniziando a pensare che fosse giù per il debug. Ho appena scoperto che se ctrl-F9 il mio server (senza punti di interruzione da nessuna parte) continua a non funzionare, ma se corro senza debugger Ctrl-shift-F9 funziona effettivamente da IDE. Questo coincide con la tua esperienza? Aggiornamento – csharpdefector

+0

, beh, il mio server funziona correttamente da IDE senza debugger, ma la mia altra istanza IDE per client quando viene eseguita senza debugger non viene inviata al server, essi eseguono quando gli ex sono eseguiti all'esterno di IDE. hmmm – csharpdefector

2

I programmi TCP/IP (di tipo Client e Server) possono essere eseguiti in modo sicuro dall'IDE Delphi.

L'unica preoccupazione potrebbe riguardare le impostazioni di FireWall, ma potrebbe non essere un problema consentire al programma di avere accesso alla rete.

Durante il debug, se si esegue passo-passo (tasti F7/F8), è in esecuzione un solo thread, quindi nessun thread in background (come il thread Server) non verrà eseguito.

È necessario avviare il server prima di eseguire il client, in base alla progettazione.

Non ho mai usato le classi TTCPClient e TTCPServer, che ho scoperto essere buggy ... provare con un altro framework, come Indy, Synapse o il nostro SynCrtSock.

Quale versione IDE Delphi stai eseguendo? Su quale sistema operativo?

+0

+1 per menzionare la possibilità di un firewall locale che causa problemi. –

+0

D2010, XP Pro SP2. In effetti, penso che userò Indy. Sì, avevo già considerato il firewall, non penso sia così, ma lo disabiliterò completamente e il controllo triplo. – csharpdefector

0

Ho avuto problemi simili durante la distribuzione di un server datasnap e client. Il problema che avevo era che il DSServer era già in esecuzione e la porta era in uso. Quindi assicurati di controllare tutte le porte e se le tue connessioni sono attive nell'IDE e anche nelle app in esecuzione.

Problemi correlati