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;
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ı");
}