Indy 9 setini kullanıyorum...(Delphi 7)
TcpClient ilk bağlandığında Server bu client için bit pointer atayıp onu ThrdManagerDefault nesnesi sayesinde bir listeye atıyor.Şöyleki:
Kod: Tümünü seç
type
PClient = ^TClient;
TClient = record // Object holding data of client (see events)
DNS : String[25]; { Hostname }
UyeAdi :string[25];
Thread : Pointer; { Pointer to thread }
end;
var
Kullaniciadi,Sifre,GelenMesaj:String;
NewClient: PClient;
GetMem(NewClient, SizeOf(TClient));//ramde client için bi yer acılıyo
NewClient.DNS :=AThread.Connection.LocalName; //clientın bilgileri alınıyor
NewClient.UyeAdi :=Kullaniciadi;
NewClient.Thread :=AThread;
bundan sonra server clienta kısa mesajlar göndermek için:
Kod: Tümünü seç
type
TCommBlock = record // the Communication Block used in both parts (Server+Client)
Command,
MyUserName, // the sender of the message
Msg, // the message itself
ReceiverName: string[100]; // name of receiver
end;
function TAnaSayfa.UyeleriBilgilendir(Komut,Mesaj: string):boolean;
var
ActClient, RecClient: PClient;
CommBlock, NewCommBlock: TCommBlock;
RecThread: TIdPeerThread;
i: Integer;
begin
CommBlock.Command:=Komut;
CommBlock.Msg:=Mesaj ;
CommBlock.MyUserName:='SERVER';
NewCommBlock := CommBlock;
with Clients.LockList do
try
for i := 0 to Count-1 do // iterate through client-list
begin
RecClient := Items[i]; // get client-object
RecThread := RecClient.Thread; // get client-thread out of it
RecThread.Connection.WriteBuffer(NewCommBlock, SizeOf(NewCommBlock), True); // send the stuff
end;
finally
Clients.UnlockList;
end;
end;
fonksiyonunu kullanarak
-Yeni üye girdi
-Yeni ürün geldi
....vs kısa uyarıları clienta gönderiyor.Clientta bu uyarılara göre kendini güncellemek için serverdan yeni bilgileri
ReadLn ve Writeln metoduyla alıyor .
Buraya kadar herşey normal esas sorun aynı server ile
Athread.Connection.WriteLn metodunda gönderdiğim stringin karakter sayısı 2000 sayısının üzerine çıktığında çoğunlukla stringin ilk kısmı clienta gidemiyor.
Ama Receive Buffer size 32768 byte ayarlı 2.000 - 5.000 karakterden oluşan string değişken harddiskde 10-12 kb tutuyor ama server bunu WriteLn metoduyla karşıya eksik olarak gönderiyor.
Bu noktada ben iki farklı Indy TcpServer mı kullanmalıyım yoksa tek seferde gönderdiğim string karakter sayısınımı azaltmalıyım.Yada yaptığım bir yanlış mı var?
Athread.Connection.WriteLn metodunun kapasitesinde bir sınırlama mı var.Help de herhangibir kısıtlama belirtmemiş...
Eğer iki adet server nesnesi kullanırsam program daha mı yavaş çalışır?
Teşekkürler....