El Terminali ve Socket Programlama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

El Terminali ve Socket Programlama

Mesaj gönderen m_ekici »

s.a.
El terminali ile Fatura/İrsaliye/Sayım/Ambar fişleri giriliyor. Bunlar benim DB ve tablolarımda tutuluyor. Bu prg Logo Tiger ile birlikte çalışıyor. Stok, Cari ve fiyatları Logo dan alıyor. Fişi kaydettikten sonra 2 işlemim var.
1. işlemde Kullanıcı fiş üzerinden Logo ya aktar seçeneğine girdiğinde Socket ile xxxx nolu porta yyyy nolu fişi aktar mesajı gidiyor. Bu işlemde herhangi bir problem yok.
2. işlemde ise fiş üzerinde Yaz seçeneğini seçiyorum. yine ana bilgisayarda 2. portu dinleyen program devreye girip hangi fişi istiyorsam onu ana bilgisayarda tanımlı yazıcıya aktarıyor.

Bu işlemler yapılırken 1. işlemde hiç problem çıkmıyor. Fakat 2. işlem yapılırken bazen socket ten bilgi okuma bölümünde prg takılı kalıyor. ve döngüye giriyor. Programı resetlemek zorunda kalıyorum. Aşağıdaki kodda ne hata olabilir? Takip için koyduğum memo da 1 ve 2 yi sürekli yazıyor ama el terminalinden bilgi gönderildiği halde 3 ü yazmıyor. (Bu hata sürekli değil bazen 2 gün doğru çalışıyor, bazen de aynı günde 10 defa takılma yapıyor. )
Not : 1. program 15123 portu 2. program ise 15124 nolu portu kullanıyor.

Kod: Tümünü seç

procedure TYForm1.MServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
TS1 : TDateTime;
begin
MEMO1.Lines.Clear;
MEMO1.Lines.Add('1.');
TS1 := Now;
 for i := 0 to MServer.Socket.ActiveConnections-1 do
    begin
    MEMO1.Lines.Add('1');
    with MServer.Socket.Connections[i] do
         begin
         MEMO1.Lines.Add('2');
         try ABLG := ReceiveText; except ABLG:=''; end; // ????????????????
         if ABLG <> '' then
            begin
            MEMO1.Lines.Add('3'); // 
            //  yazdırma işlemleri yapılıyor
            // .....
            end;
         if ceil(SecondSpan(TS1,now))>10 then
            begin
            Memo1.Lines.Add('Zaman Aşımı (5 sn)');
            Socket.SendText('Hata');
            exit;
            end;
         end;
    end;
MEMO1.Lines.Add('-End ('+IntToStr(KNO)+')');
end;
el terminalindeki kod (c#)

Kod: Tümünü seç

            if (Bag == false)
            {
                try
                {
                    Cursor.Current = Cursors.WaitCursor;
                    _client = new TcpClient(YAdr, 15124);
                    _ns = _client.GetStream();
                    _okuyucu = new StreamReader(_ns);
                    _yazici = new StreamWriter(_ns);
                    Bag = true;
                }
                catch (SocketException ex)
                {
                    Bag = false;                    
                    Cursor.Current = Cursors.Default;
                    MessageBox.Show(" Bağlantı hatası oluştu. Fiş yazdırılamaz.."+ex.Message.ToString());
                    return;                    
                }
            }

            DBConfig Baglan = new DBConfig();
                        
            YsNo = Convert.ToInt32( YZC.Text.Substring(0, 3) );                
            try
            {                
                _yazici.WriteLine("infoF: [" + Convert.ToString(SFN) + "]");
                _yazici.Flush();
                string serverCevap = _okuyucu.ReadLine();
                if (serverCevap == "Tamam")
                {
                    MessageBox.Show("Fiş yazdırıldı..");
                }
                if (serverCevap == "Hata")
                {
                    MessageBox.Show("Bilgi aktarılamadı");
                }
orhancc
Üye
Mesajlar: 585
Kayıt: 24 Ağu 2010 02:14
Konum: İstanbul / Kadıköy
İletişim:

Re: El Terminali ve Socket Programlama

Mesaj gönderen orhancc »

Gelen hatayı yakalayabiliyormusun ? Hatanın ne olduğunu görebilirsek sorunu çözebiliriz.
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Re: El Terminali ve Socket Programlama

Mesaj gönderen m_ekici »

Sorun da burda. hata vermeden takılıp kalıyor. bir süre bekledikten sonra zaman aşımı oluyor.
Cevapla