ved hjælp af tserversocket komponent

, dette brev blev sendt til delphi3000. kom, delphi - dokumentation om tserversocket er multithreading kapacitet kan synes lidt tynd for det utrænede øje.jeg vil forsøge at kaste lidt lys på emnet,.,,, det er faktisk ret nemt at lave en multithreaded server, som lytter til meddelelser om en stikkontakt.delphi har en komponent for at: tserversocket.,,, men du har brug for lidt kendskab til at bruge det.,,, med henblik på at strukturere deres arbejde, bør du:,,, - tilføje en tserversocket til deres vigtigste form.,, - der servertype ejendom til stthreadblocking, skabe en, - den nye enhed (se nedenfor), der indeholder serveren tråd.,,,, fremsætte følgende kode på onsocketgetthread,,, procedure tfrmmain. fsocketgetthread (afsender: tobject;,, clientsocket: tserverclientwinsocket;,, var socketthread: tserverclientthread), begynder, //det skaber tserverthread objekt jeg har vist. //i kode nedenfor.et nyt mål er der hver gang, //en ny forbindelse er oprettet, socketthread: = tserverthread. skabe (falsk, clientsocket);,,,,,, tserverthread er et formål, jeg har skabt mig.formålet inheits fra tserverclientthread og indeholder koden, som rent faktisk er læsning og skrivning af stikkontakten.,,, enhed, jeg skabte indeholder mindst følgende kode:,,, enhed serverthread;,,, grænseflade, anvender, vinduer, scktcomp, sysutils, klasser, former,,,,,,,,, eserverthread = klasse (undtagelse); //den serverthread er en efterkommer af, //tserverclientthread,, tserverthread = klasse (tserverclientthread), private, fsocketstream: twinsocketstream;, offentlig, procedure clientexecute; tilsidesætte; //den clientexecute tilsidesætter, //tserverclientthread. clientexecute, //og indeholder den faktiske kode, der er //henrettet, når den tråd er begyndt,,,,,, gennemførelse,,, procedure tserverthread. clientexecute;, begynder, har freeonterminate: = sandt;,,,, fsocketstream: = twinsocketstream. skabe (clientsocket,,, 100000), //100.000 er timeout i miliseconds.,,,,, mens (ikke afsluttet) og (clientsocket. forbundet),,,,,, det er hvor du vil gøre den faktiske, //venter på input, læsning og skrivning, //nedenstående eksempler viser, hvad du kan, //i., bortset fra e: undtagelse, begynder, /- der er sket en fejl, tæt og udrejse, clientsocket. lukkes, ophæve,,,,,,,,, og endelig, fsocketstream. fri,,,,,, men e: undtagelse, begynder, //er sket en fejl, tæt og udrejse, clientsocket. lukkes, ophæve;,,,,,,,,,,,, når forbindelsen er oprettet, tråd skal vente på nye data.du kan bruge denne kodeks for at vente på data:,,, hvis (ikke afsluttet) og (ikke fsocketstream. waitfordata (1)), begynder, //klare timeout,,,,, //der er nye oplysninger om det hul!,,, at læse data, bør du have en buffer for at opbevare data i.normalt den buffer er en pbytearray eller en række tegn.i dette eksempel, jeg har en buffer benævnt frequest, som er en række tegn.desuden forventer jeg et fast antal bytes.mit system er størrelsen af den konstante requestsize.,,, var, readlen, ac: heltal, begynder, fillchar (frequest, requestsize, 0), ac: = 0, gentager, readlen: = fsocketstream. læs (frequest [og], 1024); //læste jeg i dele af 1024 bytes, indtil bufferen, //er fuld, ac: = ac + readlen;,, indtil (readlen = 0) eller (= requestsize);,,,,,,, hvis readlen er 0, så jeg ikke får flere data.de læser funktion gange ud efter 100.000 miliseconds som anført i twinsocketstream. create().hvis du ikke ved, hvor meget data at forvente, at de bør sætte dette timeout ret små.30 sekunder, bør højst være i de fleste situationer.,,,,,,, når de sender et svar, du skal være klar over dine kunder opførsel.mange kunder kun venter på en række svar, andre forventer mange pakker. i dette eksempel, jeg har en klient, der forventer en pakke, så jeg er nødt til at sende data i en del:,,, fsocketstream. writebuffer (frep, freplysize);,,, frep er svaret buffer og freplysize er størrelsen af den replybuffer.,



Previous:
Next Page: