[DUG] Indy Sockets - How to Receive Asynchronously
Kyley Harris
kyleyharris at gmail.com
Thu Dec 4 10:06:15 NZDT 2008
in that case, your TCP thread should just loop read everything into your own
buffer and everytime you find CRLF you can grab the complete message from
the buffer and trigger an event. to stop yourself getting lock timeouts on
reads use the checkfordataonsource and then read whatever is in the input
buffer, that way you wont ever get a long timeout waiting for data that
might not come.
On Thu, Dec 4, 2008 at 10:01 AM, Eric A <eaa603 at hotmail.com> wrote:
> Known factors:
>
> 1. I don't know what size message will be returned.
>
> 2. The message always ends in CR LF
>
> 3. The message is always printable ASCII (not Unicode).
>
>
>
>
> ------------------------------
>
> Date: Thu, 4 Dec 2008 09:48:52 +1300
>
> From: kyleyharris at gmail.com
> To: delphi at delphi.org.nz
> Subject: Re: [DUG] Indy Sockets - How to Receive Asynchronously
>
> Also, I guess the type of data and your message layer has a big impact on
> how you design your data receiver.
>
> in my own client/servers where I control the protocol, all my messages
> first send an 8byte size packet.. So my read queue is constantly just doing
> ASize := StrToInt( '$'+ReadString(8) ) { 8 byte hex } and this is looping..
> as soon as I get a successful size I can then read the specific size of data
> into a message object and continue polling. If I need to send very large
> data like binary files,, I break it down into smaller packets encapsulated
> in messages using the above method.
>
> On Thu, Dec 4, 2008 at 9:31 AM, Eric A <eaa603 at hotmail.com> wrote:
>
> Kyley,
>
> No program design yet. Questions:
>
> 1) Inside the thread - do I have to implement a timer event to periodically
> check the buffer (since there's no "data received" event)?
>
> 2) What properties do I read to determine if there's received data
> available?
>
> 3) Do I need to use another Indy component in conjunction with the
> TCPClient for the buffering etc?
>
>
> Paul,
>
> I'll take a look at that site. Are you using ICS extensively?
>
>
> Thanks,
> Eric
>
>
>
>
>
>
> ------------------------------
>
> Date: Thu, 4 Dec 2008 09:21:03 +1300
> From: kyleyharris at gmail.com
> To: delphi at delphi.org.nz
> Subject: Re: [DUG] Indy Sockets - How to Receive Asynchronously
>
>
> Indy is blocking, so typically on the client side, you would create a
> waiting thread that you sit the TCPClient inside and loop a readtimeout
> until the resultbuffer has some data. At that point produce a local event so
> that your main thread can grab the TCPClient and read the information.
>
> without knowing your actual program design and how your TCP layer interacts
> with your main application its hard to offer any detailed advise, sorry.
>
> On Thu, Dec 4, 2008 at 9:14 AM, Paul <paul.blommaerts at telenet.be> wrote:
>
> Indy works blocking only
> Use ICS instead, they work blocking or non blocking.
> check www.overbyte.be
>
> Paul
>
> ----- Original Message -----
> *From:* Eric A <eaa603 at hotmail.com>
> *To:* Delphi UsersGroup <delphi at delphi.org.nz>
> *Sent:* Wednesday, December 03, 2008 8:55 PM
> *Subject:* [DUG] Indy Sockets - How to Receive Asynchronously
>
> I have a situation where I need to communicate with a communications server
> using Indy TCP sockets.
>
> After sending the command the server returns an "OK" response with a second
> or two to acknowledge the acceptance of the command, however the reponse
> from the end device (returned via the server) may take several minutes to
> eventuate (or a else the sever returns a timeout message). I need to be
> able to buffer the responses, be aware of when new strings arrinve, and
> carry on with other tasks. This threading aspect shouldn't be an issue as I
> understand that Indy is naturally multitrheaded by design.
>
> I'm not familiar with using the Indy sockets and since there's no "received
> data event" (due to the nature of the design) I'm wondering how I capture
> the asynchronous responses sensibly?
>
> Does anyone have some code to show me how to use the Indy 10 TCPClient
> component in this way (for the receive part) ? Its probably pretty simple
> but I need to get my head around it quickly.
>
> Thanks
>
> Eric
>
> ------------------------------
> Start searching now Rental properties galore.<http://a.ninemsn.com.au/b.aspx?URL=http://www.allrealestate.co.nz/cgi-bin/rsearch?a%3Dbhp%26t%3Dren%26cu?rsf%3Dmsnz_textlink&_t=26000&_r=REANZ_tagline&_m=EXT>
>
> ------------------------------
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at delphi.org.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject:
> unsubscribe
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at delphi.org.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject:
> unsubscribe
>
>
>
>
> --
> Kyley Harris
> Harris Software
> +64-21-671-821
>
> ------------------------------
> MSN NZ Travel Get inspired - dream, research, plan and book your next
> holiday online with
> <http://a.ninemsn.com.au/b.aspx?URL=http://travel.msn.co.nz&_t=771497011&_r=MSN_NZ_travel_hmtagline&_m=EXT>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at delphi.org.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject:
> unsubscribe
>
>
>
>
> --
> Kyley Harris
> Harris Software
> +64-21-671-821
>
> ------------------------------
> MSN NZ Travel Get inspired - dream, research, plan and book your next
> holiday online with
> <http://a.ninemsn.com.au/b.aspx?URL=http%3A%2F%2Ftravel%2Emsn%2Eco%2Enz&_t=771497011&_r=MSN_NZ_travel_hmtagline&_m=EXT>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at delphi.org.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at delphi.org.nz with Subject:
> unsubscribe
>
--
Kyley Harris
Harris Software
+64-21-671-821
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20081204/6dab63fd/attachment-0001.html
More information about the Delphi
mailing list