indy 10 ve stream gönderip alma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
DoganBir
Üye
Mesajlar: 16
Kayıt: 10 Kas 2004 02:29

indy 10 ve stream gönderip alma

Mesaj gönderen DoganBir »

indy 10 da idTCPServer ve idTCPClient komponentleri ile stream gönderip alma işlemlerinin nasıl yapıldığı konusunda bilgisi olan arkadaşlardan yardım bekliyorum. client tarafında ReadStream kullandığım zaman hata ile karşılaşıyorum.
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

iki gün kimse cevap yazmayınca ben tam emin olmasamda şunu yazmak istedim. tcp'deki stream ile delhide kullandığımız stream biraz farklı. tcp'deki stream gelen yada giden veriyi kasdediyor. direk bir stream'i atamazsın sanırm. Birde tcp-ip'in paket boyutu oalyı olduğu için senin streami parçalayarak göndermen gerekir. yani parçala gönder karşıda birleştir. stream değilde text veriymiş gibi göndereceksin.
DoganBir
Üye
Mesajlar: 16
Kayıt: 10 Kas 2004 02:29

Mesaj gönderen DoganBir »

indy 9 ile stream gönderme işini yapmıştım. karşı tarafta da gösterebilmiştim. TMemorystream kullanıyordum. Aynı işlemi indy 10 da yapmaya çalışıyorum ama olmuyor. Bağlantı bir nedenden dolayı koptu diyor.
DoganBir
Üye
Mesajlar: 16
Kayıt: 10 Kas 2004 02:29

Mesaj gönderen DoganBir »

stream gönderme kısmını hallettim. ilgilenenler http://www.marcocantu.com/md2005/Update ... _ch19.html den bakabilir. Bu arada indy 10.05 ile indy 10.1x arasında bazı farklılıklar var. Stream gönderip alma kısmı biraz değişikliğe uğramış.

Ama şimdi bir döngü içinde bunu arka arkaya yapabilmek istiyorum. 2. işleme geçtiği zaman hata veriyor.
DoganBir
Üye
Mesajlar: 16
Kayıt: 10 Kas 2004 02:29

Mesaj gönderen DoganBir »

Client tarafı aşağıdaki gibi

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i, j: Integer;
  StreamSize: Integer;
begin
  for i := 0 to 2 do
    for j := 0 to 2 do
    begin
      if not IdTCPClient1.Connected then
        IdTCPClient1.Connect;
      if IdTCPClient1.Connected then
      begin
        GIFStream.Clear;
        IdTCPClient1.IOHandler.WriteLn(IntToStr(BX+i) + ',' + IntToStr(BY+j));

        StreamSize := StrToInt(IdTCPClient1.IOHandler.ReadLn);

        try
          IdTCPClient1.IOHandler.ReadStream(GIFStream, StreamSize);
          GIFStream.Seek(0, soFromBeginning);
//          StreamGoster(GIFStream);
          GIFStreamImage.LoadFromStream(GIFStream);
          Bitmap1.Assign(GIFStreamImage);
          Image1.Canvas.Draw(j*64, i*64, Bitmap1);
        finally

        end;
      end;
  end;
  Image1.Refresh;
end;
Server Tarafı da

Kod: Tümünü seç

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  nSize: Integer;
begin

  with AContext.Connection.IOHandler do
  begin
    Block := ReadLn;
    Konumla;
    StreamGoster(GIFStream);

    nSize := GIFStream.Size;
    WriteLn(IntToStr(nSize));

    WriteBufferOpen;
    Write(GIFStream);
    WriteBufferClose;

    AContext.Connection.Disconnect;
  end;
end;
ilk işlemde sorun çıkmıyor. İkinciye geçtiği zaman çöküyor. Tavsiyelerinizi bekliyorum.
DoganBir
Üye
Mesajlar: 16
Kayıt: 10 Kas 2004 02:29

Mesaj gönderen DoganBir »

sorunu sonunda buldum ilerde karşılaşacaklar için belirteyim. Server tarafında işlemi yaptıktan sonra bağlantıyı kesiyorduk ama client tarafı bağlantının kesildiğini anlamışyırmuş. Bu yüzden client tarafında da işinizi bitirdikten sonra bağlantıyı kopartmanız gerekiyor.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Paylaştığın için teşekkürler :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla