Merhaba,
TClientSocket ile aşağıdaki şekilde komut göndermem lazım. Ancak her komut gönderiminden sonra gelen cevap ACK ise sonraki komuta geçmem NAK ise ENQ gönderip tekrar ACK beklemem lazım eğer NAK gelirse tekrar ENQ gitmeli.
Komutlar sıra ile gönderilirken cevap gelmeden diğer komuta geçmemeli.
Burada bekleme işlemini en efektif nasıl yapabilirim?
TClientSocket komut dizesi göndermek
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: TClientSocket komut dizesi göndermek
ClientSocketin OnRead eventine komutları sıralarsın. Gelen komuta göre yeni komut gönderirsin. Zaten OnRead sunucudan yanıt bekler senin beklemek için bişey yapmana gerek yok. Burada kullanacağın olay ReceiveText dir. Bunu bekleyeceksin.
İlk komutu Button ile göndereceğin için gelen cevap zaten OnRead'e düşecek. Buradan gelen komuta göre komut gönderirsin. Socket mantığı bu şekilde çalışır.
Kod: Tümünü seç
procedure OnRead();
var
sCmd:String;
begin
sCmd:=Socket.ReceiveText;
if sCmd = 'ACK' then
Socket.Sendtext('Sonraki komut');
-
- Üye
- Mesajlar: 43
- Kayıt: 01 Kas 2013 10:03
Re: TClientSocket komut dizesi göndermek
Komut gönderim işlemini onread da değil de başka bir procedure üzerinden yapmam gerekiyor.
Re: TClientSocket komut dizesi göndermek
Hayır @G.Arkas haklı.
OnRead ile verinin geldiği Socket üzerinden cevap yollayacak, karşı tarafın da alıp almadığını teyid ederseniz işlem gerçekleşti kabul edersiniz.
Kendi projelerimde anladım manasındaki bu kabul işlemini tek bir tilda ( ~) işareti kullanırım.
Bu şekilde eğer dediğiniz ikincil işlem lazım gelse de önce anladım deyip beklentiye cevap verip ondan sonra aynı socket üzerinden ikincil işlevi hayata geçirirsiniz.
OnRead ile verinin geldiği Socket üzerinden cevap yollayacak, karşı tarafın da alıp almadığını teyid ederseniz işlem gerçekleşti kabul edersiniz.
Kendi projelerimde anladım manasındaki bu kabul işlemini tek bir tilda ( ~) işareti kullanırım.
Bu şekilde eğer dediğiniz ikincil işlem lazım gelse de önce anladım deyip beklentiye cevap verip ondan sonra aynı socket üzerinden ikincil işlevi hayata geçirirsiniz.
-
- Üye
- Mesajlar: 43
- Kayıt: 01 Kas 2013 10:03
Re: TClientSocket komut dizesi göndermek
Komutları array e doldurup mecburen onread e taşıdım artık.