delphi xml socket projesi
Delphide xml socket web uygulaması ile ilgilenen arkadaşlar için bir kaç bilgi vermek istiyorum. Neler Yapılabilir? Xml socket web uygulaması çalışmaları genelde sohbet uygulaması için düşünülmektedir. Bunun başlıca nedeni hızı ve herhangi bir database kullanıma ihtiyaç duymamasıdır. Performans için güzel bir seçim olacaktır. Diğer bir uygulama ise; oyun projesidir. Online okey, tavla, batak vs. şeklinde oyunlar yapılabilir. Web uygulaması ile ilgili anlık bilgi gönderimi ve alımı yapılabildiği için ayrıca minimum sunucu kaynağına ihtiyaç duydugundan çok daha çeşitli uygulamalarda kullanılabilir. Benim üzerine yoğunlaştığım durum ise sohbet ve online oyun projesidir.
Nasıl Yaparım? öncelikle flash action script ile ilgili birazda olsa bilgiye ihtiyacınız olacaktır. Örnek çalışma hakkında buradan bilgi alabilirsiniz. Burada arkadaşlar yararlanabileceğiniz bir kaç bilgi vermiş. Bilgiler gayet başarılı şekilde kullanılabilmektedir.
Olayın delphi yanına geldiğimizde bir kaç sorunla karşılaşabiliyoruz. Öncelikle bu işi localhos'ta denemenizde çok fayda var. Arkadaşların yayınladığı makalede delphi için zero byte olarak CHR(10) kullanılabilir denilmiş. Fakat ne kadar denesemde çalışmadı. Bunları yazmaktaki amacım zaten yaşadığım sorunları sizinle paylaşarak sizede yardımcı olabilmektir. Bende tabi bu zero byte olayını çözebilmek için bi döngü kurdum ve bir süre sonra asıl char koduna ulaştım. Kullanacağımız zero byte Chr(0) dır. Tabi bu benim işletim sistemimden mi kaynaklanıyor bilemem fakat olmazsa sizde döngüye sokup deneyebilirsiniz.
Yaptığım uygulama sohbet uygulamasıydı. Yukarıda verilen linkte flash bölümü anlatılıyor. Anlatmaya gerek duymuyorum. Delphide ise yine yukarıda bahsettiğimiz zero byte nedir onu anlatayım. Chat yapıyorsunuz enter tuşuna bastığınızda yazının gitmesini istiyorsunuz diyelim. Delphiden flasha gönderim yaparken text bilgisinin sonuna bu zero byte kodunu eklemeniz gerekiyor. Flash bunu yazı bitimi olarak algılayarak gösteriyor. Şöyleki, siz flashtan delphi sunucu uygulamanıza yazı gönderdiğinizde gidiyor. Fakat delphiden yazıyoruz flasaha ulaşmıyor. Nedeni budur. Yolladığınız yazının sonuna zero byte saçmalığını eklemeniz gerekiyor. Yani Chr(0)'ı.
Delphi xml socket server uygulamamda ServerSocket bileşenini kullandım. Bu bileşen delphi internet bileşenleri arasında yer alıyor. Olmayan arkadaşlar ise delphi içinde bulunan blp dosyalarından palete ekleyebilir. İnternette nasıl yapıldığı anlatılıyor.
Son olarak yaşayacağınız sorun ise flash güvenliğidir. Yazı gönderip aldığınızda flashın bulunduğu sitenin server tarafından kabul ediliyor olması gerekmektedir. Bunun için bir kaç yöntem var ama ben size nasıl yaptığımı anlatayım direkt olarak.
Sorunun Kaynağı Bu :) <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*" to-ports="*" /> </cross-domain-policy>
Delphi uygulamasında şöyle çalışıyor. Flastan yazı gönderdiğinizde delphiye yazdığınız yazı değil şu "<policy-file-request/>" düşüyor. Biz ne yapıyoruz.
Serversocket'in onclientread olayına if (memo2.Text='<policy-file-request/>') then begin ServerSocket1.Socket.Connections[strtoint(edit4.Text)].SendText(Memo3.Text+ Chr(0)); end;
Yazıya cevap olarak memo3 ün içinde kayıtlı poliçemizi gönderiyoruz. Poliçe yukarıda bulunan xml verimizdir. Orda izinleri vs. sınırlayabilirsiniz. Bu şekilde kullanım sınır olmadan kullanımdır. Yani her domainde veya portta çalışır. Bizden poliçe istedi bizde poliçe isteyen connections'sa poliçemizi + zero byte karekterimizi yolladık ve çalıştı. İşallah sizdede sorunsuz çalışır.
Zamanımın kısıtlı olması durumundan sorunlar üzerinde durmaya çalıştım. Delphide gerçekten iyi bir web uygulaması yapmak istiyorum. Ama sorunum var diyorsanız bilgim doğrultusunda yardımcı olmaya çalışırım. Bende oyun projesine başlayacağım işlerimizden vakit bulabilirsem.
Allah (c.c.), sınırlı şartlarda kendini geliştirmeye çalışan tüm arkadaşların yardımcısı olsun. Saygılar,
Znet Yazılım Yazılım Sorumlusu Serkan YAZICI
|