TClientSocket komut dizesi göndermek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
AliCinkilic
Üye
Mesajlar: 43
Kayıt: 01 Kas 2013 10:03

TClientSocket komut dizesi göndermek

Mesaj gönderen AliCinkilic »

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?
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: TClientSocket komut dizesi göndermek

Mesaj gönderen G.Arkas »

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.

Kod: Tümünü seç

procedure OnRead();
var
sCmd:String;
begin
sCmd:=Socket.ReceiveText;

if sCmd = 'ACK' then
Socket.Sendtext('Sonraki komut');
İ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.
Resim
AliCinkilic
Üye
Mesajlar: 43
Kayıt: 01 Kas 2013 10:03

Re: TClientSocket komut dizesi göndermek

Mesaj gönderen AliCinkilic »

Komut gönderim işlemini onread da değil de başka bir procedure üzerinden yapmam gerekiyor.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: TClientSocket komut dizesi göndermek

Mesaj gönderen mrmarman »

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.
Resim
Resim ....Resim
AliCinkilic
Üye
Mesajlar: 43
Kayıt: 01 Kas 2013 10:03

Re: TClientSocket komut dizesi göndermek

Mesaj gönderen AliCinkilic »

Komutları array e doldurup mecburen onread e taşıdım artık.
Cevapla