Å gjøre en søknad et TCP /IP-klient (med eksempelkode) ...

Koble til en TCP /IP-server fra en Delphi Client Denne artikkelen er en videreføring av min forrige artikkel (http://www.howtodothings.com/showarticle. asp? article = 218) hadde til hensikt å vise hvordan vi kan bruke TclientSocket komponent i Delphi som en TCP /IP-klient mot enhver TCP /IP server. Serveren kan være skrevet i Delphi bruker TserverSocket komponent eller noen stykke kode som fungerer som en TCP /IP server. I mitt tilfelle er jeg i samspill med en Java-kode fungerer som en TCP /IP server.In prosjektet mitt, jeg er bare å sende en haug med bytes til at Java-serveren og Java server leser bytes og gjør noen oppgaver sende en annen gjeng bytes som svar til Delphi Client.In min forrige artikkel (http://www.delphi3000.com/article.asp?id=1695), forklarte jeg problemet jeg møtte og en løsning jeg fant for that.In denne artikkelen, la meg gi noen eksempelkode jeg brukte i dette prosjektet siden noen folk spurte meg om å sende kildekoden for denne sokkel kommunikasjon ved å sende separate e-post. Jeg setter pris på dem for deres interesse. Her U Go !! Nyt !!! Mitt prosjekt bruker nesten ni skjemaer og alle skjemaene må samhandle med Java server minst én gang. Så jeg har lagt en DataModule og sette en TClientSocket Component det: Følgende er koden for at: enhet DataMod; interfaceusesWindows, Messages, SysUtils, kurs, grafikk, kontroller, skjemaer, Dialoger, ScktComp, OleServer; typeTdmDataModule = klasse (TDataModule) csClientSocket : TClientSocket; prosedyre csClientSocketError (Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; Var errorcode: Integer); prosedyre csClientSocketRead (Sender: TObject; Socket: TCustomWinSocket); prosedyre DataModuleDestroy (Sender: TObject); private {felleserklæringer} publicFWaiting : boolean; {offentlige erklæringer} end; vardmDataModule: TdmDataModule; gjennomføringen {$ R * .DFM} prosedyre TdmDataModule.csClientSocketRead (Sender: TObject; Socket: TCustomWinSocket); //Lese data tilbake fra serveren gj socketvarBuffer: array [0 .. 4095] av røye, BytesReceived: integer; Memory: TMemoryStream; beginwhile FWaiting dobeginMemoryStream: = TMemoryStream.Create, prøv //Denne tidsforsinkelse avhenger av nettverkstrafikk og også du kan sette tidsforsinkelsen mellom leser //Jeg har nettopp satt rundt 200 millisekunder for søknaden min før det begynner å lese fra server.Sleep (200), mens Sann dobeginBytesReceived: = Socket.ReceiveBuf (buffer, sizeof (buffer)); if (BytesReceived < = 0) thenBreakelsebeginMemoryStream.Write (buffer, BytesReceived); end, end, FWaiting: = False; MemoryStream.Position: = 0; //XMLResponse er en global stringlist jeg bruker i min søknad for å konvertere byte mottatt i streng //Du kan bruke andre måter å få Innholdet i en memorystreamXMLResponse.LoadFromStream (Memory); finallyMemoryStream.Free; ende; ende; ende; prosedyre TdmDataModule.csClientSocketError (Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; Var errorcode: Integer); {Når du får en bestemt type feil mens du kjører klienten vil du bli gitt en messagedlg som viser at det har oppstått en feil; på den tiden du har til å sjekke om serveren kjører riktig eller ikke, og om nødvendig foreta serveren kjøre skikkelig og deretter si OK.Then csClientSocket.Open vil prøve å koble til serveren. Så på dette tidspunktet hvis noen transaksjon er i midten du må sende de samme tingene igjen etter å gjenoppta kontakten} begincase ErrorEvent ofeeGeneral. Beginif MessageDlg ('! Feil Tilkobling til Java server' + # 13 + 'Sjekk status serveren og prøv igjen !! ', mtInformation, [mbOk], 0) = mrOk thencsClientSocket.Openend; eeConnect: beginif MessageDlg ('? Feil Tilkobling til Java server '+ # 13 +' Sjekk status serveren og prøv igjen !! ", mtInformation, [ ,,,0],mbOk], 0) = mrOk thencsClientSocket.Openend; eeSend: beginif MessageDlg ('? Feil Tilkobling til Java server' + # 13 + 'Sjekk status serveren og prøv igjen !! ", mtInformation, [mbOk], 0) = mrOk thencsClientSocket.Openend; eeReceive: beginif MessageDlg ('feil ved tilkobling til Java server?' + # 13 + 'Sjekk status serveren og prøv igjen !! ", mtInformation, [mbOk], 0) = mrOk thencsClientSocket.Openend; eeAccept: beginif MessageDlg ('Feil Tilkobling til Java server?' + # 13 + 'Sjekk status serveren og prøv igjen !! ", mtInformation, [mbOk], 0) = mrOk thencsClientSocket.Openend; ende; ende; prosedyre TdmDataModule.DataModuleDestroy (Sender : TObject); begynne //Lukke socket connectioncsClientSocket.Close; ende; end.Once du er ferdig med datamodule, kan du inkludere denne datamodule i enheter der du trenger å samhandle med serveren slik at du kan unngå å skrive kode for å lese data tilbake fra serveren i ulike steder av project.You kan stille Host /adressen og portnummeret til serveren for å kommunisere under kjøring gjennom runtime-parametre. (Jeg antar Delphi folk oppmerksomme på at runtime-parametre) Så i prosjektets hoved skjemaets formcreate hendelse; skriver følgende kode for å koble til serveren. dvs. at IP-adressen og portnummeret til serveren i TClientSocket komponent og sette Aktiv til sann .//Koble til Java server på en bestemt porttrywith dmDataModule.csClientSocket dobeginif Active deretter Aktiv: = False; //Får Address eller Host navnet på serveren gjennom runtime parametersHost: = ParamStr (1); //Får portnummeret til serveren hvor serveren lytter gjennom runtime parametersPort: = StrToInt (ParamStr (2)); //Å gjøre tilkoblingen activeActive: = true; ende, unntatt på ESocketError dobeginMessageDlg ('Kan ikke koble til Java Server' + # 13 + 'Vennligst prøv igjen! ", mtInformation, [mbOk], 0); exit; ende; ende; Når du er koblet til server, kan du bruke enten TClientSocket sin sendtext eller sendstream metode for å sende data til serveren.For eksempel: prosedyre Send; begynne //Sjekker om socket-tilkobling er klar eller ikke //Hvis ikke, feilhåndtering del av TClientSocket vil være activatedif csClientSocket.Active thenbegin //Sende teksten gjennom kontakten connectioncsClientSocket.Socket.SendText ('Strengen å sende'); //Stille et flagg for å vente til serveren sender svaret backdmDataModule.FWaiting: = True, mens dmDataModule.FWaiting thenApplication.ProcessMessages; ende; ende; Enjoy !!! Thanks.Magesh
.



Previous:
Next Page: