servis ve Socket problemi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
servis ve Socket problemi
Merhaba Arkadaşlar
TServerSocket ve client ile yaptığım testler problemsiz çalışıyor. gönderme ve cevaplar sıkıntısız geliyor. Server tarafını bir servis içerisine yazdığımda bağlantı sağlanıyor, onClientRead tetikleniyor fakat Socket.ReceiveText boş geliyor. Bunun sebebi ne olabilir?
İyi Çalışmalar
TServerSocket ve client ile yaptığım testler problemsiz çalışıyor. gönderme ve cevaplar sıkıntısız geliyor. Server tarafını bir servis içerisine yazdığımda bağlantı sağlanıyor, onClientRead tetikleniyor fakat Socket.ReceiveText boş geliyor. Bunun sebebi ne olabilir?
İyi Çalışmalar
Re: servis ve Socket problemi
Ilk aklima gelen soketin handle degeri almamis olmasiydi fakat clientreceivenin tetiklenmesi bu ihtimali devre disi birakiyor.
Veriyi nasil gönderiyorsun?
Veri partinin büyüklügü ne?
Receivelength hangi degeri veriyor?
Veriyi nasil gönderiyorsun?
Veri partinin büyüklügü ne?
Receivelength hangi degeri veriyor?
kıdemsiz üye
Re: servis ve Socket problemi
sadece 'test' gönderiyorum. veriyi arttırdım, şimdi bazen gidiyor bazen gitmiyor. DataSnap kullanalım dedik Professional versiyonda yok imiş?
Re: servis ve Socket problemi
Receivelength'e baktiniz mi? Clientread tetikleniyorsa receivelength sifirdan büyük olmali. Eger sifirdan büyük ise receivebuf vasitasi ile veriyi okumayi deneyin. Normalinde mesajin sorunsuz gelmesi gerek. Aksi taktirde veri gönderen taraf hata mesaji verir.
kıdemsiz üye
Re: servis ve Socket problemi
ikra muhtemelen sen biliyorsundur ama bilmeyenler için bilgi: socket UDP ise gönderen taraf hata vermez. (En azında ben öyle tahmin ediyorum )ikra yazdı:Receivelength'e baktiniz mi? Clientread tetikleniyorsa receivelength sifirdan büyük olmali. Eger sifirdan büyük ise receivebuf vasitasi ile veriyi okumayi deneyin. Normalinde mesajin sorunsuz gelmesi gerek. Aksi taktirde veri gönderen taraf hata mesaji verir.
There's no place like 127.0.0.1
Re: servis ve Socket problemi
ben genelde thread içinde kullanarak, Clientsocket1.Socket.ReceiveText şeklinde okuyorum, şimdiye kadar böyle bir problemle karşılaşmadım.
algoritmam aşağıdaki gibi basit;
///thread
var
text:string;
begin
sleep(10); bunu koymazsak thread içine işlemci seviyemiz coşabilir...
text:=Clientsocket1.Socket.ReceiveText; //ilk başta okuyorum
if text='' then exit; //boş ise çıkıyorum.
if length(text) < 3000 then // gelen verinin uzunluğuna bakıyorum
begin
sleep(1000); //sonra tahmini olarak, gelen verenin uzunluna göre bekletip bir daha okuyorum...
text:=text+Clientsocket1.Socket.ReceiveText;
end;
end;
Not: Bazen network sorunlarından ötürü alt alta hiç bekletmeden birkaç kere okumak hasıl oluyor...
text:=Clientsocket1.Socket.ReceiveText;
text:=text+Clientsocket1.Socket.ReceiveText;
text:=text+Clientsocket1.Socket.ReceiveText;
Belki threadle deneyebilirsin. breakpointle gitmeyi ve loglamayı zaten denemişsindir...
iyi çalışmalar...
algoritmam aşağıdaki gibi basit;
///thread
var
text:string;
begin
sleep(10); bunu koymazsak thread içine işlemci seviyemiz coşabilir...
text:=Clientsocket1.Socket.ReceiveText; //ilk başta okuyorum
if text='' then exit; //boş ise çıkıyorum.
if length(text) < 3000 then // gelen verinin uzunluğuna bakıyorum
begin
sleep(1000); //sonra tahmini olarak, gelen verenin uzunluna göre bekletip bir daha okuyorum...
text:=text+Clientsocket1.Socket.ReceiveText;
end;
end;
Not: Bazen network sorunlarından ötürü alt alta hiç bekletmeden birkaç kere okumak hasıl oluyor...
text:=Clientsocket1.Socket.ReceiveText;
text:=text+Clientsocket1.Socket.ReceiveText;
text:=text+Clientsocket1.Socket.ReceiveText;
Belki threadle deneyebilirsin. breakpointle gitmeyi ve loglamayı zaten denemişsindir...
iyi çalışmalar...
Re: servis ve Socket problemi
Servis uygulamasıysa breakpoint olamayacak bildiğim kadarıyla. Ancak loglanabilir. Ama en güzeli ayrı thread ile denemek. Daha doğrusu, servis te çalışacak kodu, önce normal uygulama tamamlayıp test etmek ve tabiri caizse yorumlarını dahi değiştirmeden servis uygulamasına yapıştırmak gerekiyor. Elle aktarım yaparken insan gözünden birşey kaçırıyor. Debugger da çalıştırma şansı olmadığı için tırmalayıp duruyor.
Ömür Ölmez
Re: servis ve Socket problemi
Servis uygulamalarında TService.LogMessage methodunu kullanarak çok kolay programınızı log'layabilirsiniz.
Tabiki log'larınızı Windows Olay Görüntüleyicisi --> Windows Günlükleri --> Uygulama altında görebileceksiniz.
Tabiki log'larınızı Windows Olay Görüntüleyicisi --> Windows Günlükleri --> Uygulama altında görebileceksiniz.
There's no place like 127.0.0.1
Re: servis ve Socket problemi
Tşk Arkadaşlar, thread a gerek kalmadan çalıştı. Threadı denemeye vaktim yok. Başka bir projede deneriz inş. Olay görüntüleyiciye bakmak hiç aklıma gelmedi. tşk