2009-01-03 10 views
6

Delphi uygulamasında TServerSocket bileşenini kullanıyorum. İstemci bağlantılarını sınırlamak istiyorum, diyelim ki bin diyelim. Ne yazık ki bunu nasıl yapacağımı bilmiyorum. Bileşen, 'MaxConnections' veya bunun gibi başka herhangi bir özellik sağlamamaktadır.Delphi: TCP bağlantılarını sınırlandırma

OnGetThread olayını kullanarak yeni sunucu iş parçacığı (TServerClientThread) oluşturuyorum. Aktif bağlantı sayısını almak için 'Socket.ActiveConnections' özelliğini kullandım.

Ne yazık ki ne yapacağımı bilmiyorum. Bağlantı sayısı sınırın üstünde olduğunda OnGetThread prosedüründe herhangi bir iş parçacığı oluşturmamaya çalıştım, ancak hiçbir şey değişmedi - istemci, herhangi bir bilgi gönderip alamadığı halde sunucuya bağlanabilir ve bağlantıda kalabilir. Yeni istemcilerin bağlanmasına izin vermemek veya yalnızca bağlantı kurmasına izin vermek, ancak bağlantıyı anında kesmek için ne yapılmalı?

+0

İyi soru. Kendim gibi bir şey yapmak zorundayım, çok zamanında! – robsoft

cevap

14

Son bir kaç yıl önce Delphi kullandım, ama benzer bir durumla başa çıkabildim ve tecrübelerim sizin için yararlı olabilir: Ben de aynı sorunla karşılaşıyordum ve "Indy" ye geçmek istemiyordum (büyük) uygulamadan beri bileşenler limana değmezdi. Bildiğim kadarıyla ben bildim bileli, sunucu soket üzerinde bir onClientConnect olay ve burada ben sınırı yönünden kontrol edildi olduğunu olmalıdır: Ben bundan daha başka hatırlayamıyorum

.onClientConnect(Sender: TObject; aSocket: T...) 
begin 
    if(YourServerSocket.ActiveConnections > YourDefinedMaxConnections) 
    begin 
     // Drop the connection 
     aSocket.Close; 
    end; 
end 

ama i düşünmek Bu hatlarda bir şey yaptım, ya da en azından bu ortaya çıktığım şeydi.