indy 10 ve stream gönderip alma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
indy 10 ve stream gönderip alma
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.
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.
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.
Ama şimdi bir döngü içinde bunu arka arkaya yapabilmek istiyorum. 2. işleme geçtiği zaman hata veriyor.
Client tarafı aşağıdaki gibi
Server Tarafı da
ilk işlemde sorun çıkmıyor. İkinciye geçtiği zaman çöküyor. Tavsiyelerinizi bekliyorum.
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;
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;