Omdefinerer TCP /IP Client ...

Hvordan skaper vi et TCP /IP Server /Client i Delphi? Denne artikkelen er en omdefinert versjon av min forrige artikkel (http://www.howtodothings.com/showarticle.asp?article= 220 Lage et program et TCP /IP-klient (med eksempelkode) ...). Kanskje dette er for sent, men håper det er nyttig. I denne artikkelen, jeg prøvde å forklare /diskutere, generelt, hvordan man lager TCP-IP-klienter og servere med Delphi. Det jeg prøvde å demonstrere i denne eksempelkoden?
Jeg prøvde å demonstrere et enkelt TCP- IP klientprogram som kobler seg til en bestemt port på et TCP-IP-server og utveksler data. Jeg ville ikke si noe om serveren, bortsett fra at min søknad var å snakke med en TCP-IP server skrevet i Java. Men alt du trenger å snakke med en server er adressen /host og port /tjeneste detaljer. Og for å snakke med serveren, må du sørge for at serveren kjører. Det er alt. Du trenger ikke å bekymre deg for hvordan denne serveren er implementert med mindre du ønsker å utvikle både på server og klient selv. I denne artikkelen, la meg gi deg en kort oversikt over hvordan du skriver en TCP-IP server i Delphi Dette er hva jeg har gjort i denne kildekoden.
En. Opprettet en tilkobling til serveren når programmet starts.2. Brukes en SendXml prosedyre for å sende data til server.3. Brukte OnClientSocketRead begivenhet å lese tilbake data fra server.4. Brukte OnClientSocketError hendelse for å fange errorsYou vil se en boolsk flagg kalt fWaiting i både SendXml og OnClientSocketRead prosedyrer. I søknaden min, vil jeg sende noen data til serveren og vente på serveren til å svare tilbake. Jeg vil egentlig vente til OnClientSocketRead hendelsen skal skje håper at serveren svarer ASAP. Det er grunnen til at jeg brukte boolsk flagg fWaiting. Hvor skal jeg begynne å ha en idé om hva TCP-IP klient og TCP-IP server?
For folk som ønsker å prøve, vil jeg foreslå at de skal ha en se på demoprosjektet kalt Chat.dpr både Delphi 5 og 6. følgende er lenker til prosjektet: Delphi 5:
C: \\ Program Files \\ Borland \\ Delphi5
\\ Demoer \\ Internet \\ Chat \\ chat.dpr
Delphi 6:
C: \\ Program Files \\ Borland \\ < B> Delphi6
\\ Demoer \\ Internet \\ Chat \\ chat.dpr
Hva er egentlig en TCP-IP klient?
Det er et program som kobler til en spesifikk port på et TCP-IP-server og utveksler data enten som en bekk eller tekst. Hva gjør du trenger for å lage en med Delphi?
Alt du trenger er en TClientSocket komponent tilgjengelig på internett paletten satt følgende egenskaper : adresse:
Du kan skrive inn IP-adressen i TCP-IP server som denne klienten kobler seg til. Host:
stedet for Adressen kan du legge inn et alias navn for IP-adresse her i Host eiendom. Det er tydelig å sette enten Address eller Host eiendom. Men hva skjer hvis du setter begge deler? Host eiendom forrang for adresse property.Setting verten eiendommen ville bli bedre i forhold til adresse eiendommen siden selv om du endrer TCP-IP server til en annen maskin eller endre IP-adressen til noe annet, så lenge du holder aliasnavn samme, du er fin; trenger du ikke å bekymre deg for å endre det på TCP-IP klient. (Selv om det er en liten overhead for å løse vertsnavnet til den tilsvarende IP-adressen, er det verdt å ha det) Port:
Det er et gyldig heltall portnummer der TCP-IP-serveren lytter . (Og reagerer.) Det er alltid et fast antall tildelt av serveren. Til dette portnummeret, vil klienten koble til og sende og motta data Tjeneste.
Som vert og adresse egenskaper er knyttet sammen på en måte, er Port og Service egenskaper også knyttet. Generelt er service noe TCP-IP-server kan gi til sine kunder som http, ftp. Disse standardtjenester som har fått tildelt et bestemt portnummeret på serveren. (F.eks http - port 80). Hvordan det fungerer? På serveren, er det en tjenester fil som kart tjenester til deres respektive porter. Så sånn, kan du ha din egen tjenestebeskrivelse som er tilordnet til en bestemt port nummer på serveren. I så fall kan klienten koble til tjenesten bruker tjenesten eiendom og samhandle. korrespondanse:
Denne egenskapen avgjør om samspillet mellom server og klient skjer synkront eller asynkront. ctNonBlocking Anmeldelser - Standard. Dette indikerer at samspillet mellom server og klient foregår asynkront. dvs. klienten kan sende data til serveren og vente på OnRead data for å forekomme når data blir sendt tilbake fra serveren. ctBlocking Anmeldelser -. Dette brukes for samhandling skal skje synkront mellom serveren og klienten Når skal gjøre klienten kode thread-safe
Hvis mer enn én forespørsel er sendt til serveren fra? et klientprogram om gangen
, så kunden koden skal være tråd-safe. Ellers kan forespørsel-svar kolliderer. Når skal gjøre serverkoden trådsikker?
Hvis mer enn en forespørsel sendes til serveren enten fra et klientprogram eller andre klientprogrammer på en tid
, så serveren koden skal være tråd-safe. Dette gjelder for alle TCP-IP-servere skrevet på andre språk also.Hope Jeg gjør meg klar på tråden-safe del. Hvilken er det beste stedet å sette TClientSocket komponent i et program?
Du kan sette komponenten enten i et skjema eller DataModule. Hvis du bare har et enkelt skjema i klientprogrammet som snakker til en server, så er det greit å sette det TClientSocket komponent i denne form. Men hvis du har mange former i klientprogrammet, så er det bedre å sette komponenten i en DataModule og bruke den DataModule der det trengs. Jeg brukte en DataModule i min klient program siden jeg hadde mange former hver snakker til serveren på et annet tidspunkt. Hvordan du oppretter en tilkobling til serveren du?
Sett alle disse egenskapene som er nevnt ovenfor, og deretter sette enten Aktiv eiendom til sann eller ring Open metoden. Når du oppretter en tilkobling, kan du sende data ved hjelp av enten SendText eller SendStream metode. Og du kan bruke den OnClientSocketRead hendelse for å lese data tilbake fra serveren. Hva er en TCP-IP server?
Det er et program som lytter på en bestemt port og svarer til kunder. Det kan være noen standard servere som HTTP, FTP eller en tilpasset server gjort for ditt bruksområde. Hva trenger du å lage på med Delphi?
Som med klienten, trenger du en TServerSocket komponent med følgende egenskaper satt: Port:
Du kan tildele en gyldig heltallsverdi. Til denne porten, kan klienten koble seg til og kommunisere med serveren Tjeneste.
Som jeg fortalte tidligere, kan du ha et tjenestenavn i forbindelse med en port number.Whenever vi si server , bør det være i stand til å betjene mer enn en klient tydeligvis; så bare det er fornuftig å ha en server. Høyre? Nå er det neste spørsmålet er hvordan disse klientene snakker til serveren: mer enn en klient om gangen eller en klient om gangen. Det fører til følgende egenskapsinnstilling som avgjør om kundene snakker med serveren synkront eller asynkront. Hvordan vi håndterer mer enn én klient forespørsler om gangen?
Svaret er å gyte en ny tråd for hver klient forespørsel. Dette kan oppnås ved å sette ServerType eiendom til stThreadBlocking. Har gyting og ødelegge en tråd for hver klient forespørsel en overhead? Ja. Åpenbart. Men hvis vår søknad design krever det, så det er ingen annen måte; du må ha som overhead. Kan vi redusere den overhead til å skape og ødelegge tråder? Ja. Vi kan. Hvordan? Cache disse trådene. Right.the ThreadCacheSize eiendom tjener dette formålet. Standardverdien er 10, men denne verdien avhenger av klientapplikasjonsbehov. Du bør være svært forsiktig med å sette denne verdien. Hvis du setter den til en maksimal verdi, vil du ende opp i problemer med hukommelsen. Hvis du setter den til en svært lav verdi, vil kunden ha en ventetid for hver forespørsel. Så du må finne en best verdi på bakgrunn av kundens statistics.If klientforespørsler kommer en om gangen, så kan du sette den ServerType eiendom til stNonBlocking. Hvordan vi lese data tilbake fra klienten?
Som med ClientSocket, har vi OnClientRead begivenhet å lese data fra klienten blant annet events.That oss alle. Håper du kan skrive deg både en klient og server med denne informasjonen. Som alltid, kan du gjerne dele dine synspunkter, forslag og erfaringer med våre Delphi samfunnet.