Şimdi Ara

C++ Soket Sorunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
11
Cevap
0
Favori
347
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar, VS C++ da çoklu istemciye hizmet veren bir soket sistemi yazmaya çalışıyorum. Fakat bildiğiniz üzere istemciden belirli bir büyüklüğün üstünde veri gelince, sunucuya veri parça parça düşüyor.

    Amacım parçalı gelen paketleri birleştirerek almak. İnternette bu konuda birçok yere baktım fakat bir türlü çözemedim.

    Proje kodları : ghostbin.com/paste/xhu8q
    Proje indirme linki : s7.dosya.tc/server6/ltzvvh/ProSoketim.zip.html

    Projeyi VS 2015 ile oluşturdum ama sürüm farkı olmaz herhalde.

    Yardımcı olursanız sevinirim :)



  • Sorun sunucuya gelen ufak verileri birleştirmekten cok Socket / TCP/IP / Network programlama ile ilgili bir tutorial okumamaktan kaynaklı gibi geldi bana : )

    < Bu ileti mini sürüm kullanılarak atıldı >
  • birçok kaynak okudum fakat bu konuda bir türlü aşama kaydedemedim. konunun başına fazla bilgim olmadığını belirtmedim anlaşılır diye :). rica etsem yardımcı olur musun?

    bahsettiğin gibi parçalanarak gelen paketleri birleştirmeye çalışıyorum.

    sorunun çözümü olarak şöyle bir düşüncem var
    verinin başına ve sonuna özel karakter koyulur. ayrıca veri başında verinin toplam boyutu yazılır. gelen paketleri tek bir değişkende toplanır. veri sonuna koyduğum özel karakterin olduğu paket gelince bütün veriyi almış olur.

    ama bu fikri uygulamaya geçirmekte sıkıntı çekiyorum.



    < Bu mesaj bu kişi tarafından değiştirildi exe676 -- 30 Mayıs 2018; 23:15:46 >
  • exe676 kullanıcısına yanıt
    Yıllar önce deneme amaçlı bir TCP server yaptım. Bahsettiğin sorunu çözerdim fakat şunun gibi



    http://www.cs.columbia.edu/~danr/courses/6761/Fall00/hw/pa1/6761-sockhelp.pdf



    bir tutoriala birkaç saat çalışıp konuları hatırlayarak ve birkaç deneme yaparak ancak mümkün olabilir. Fakat netwrok / socket programlama ilerde yapmayı düşünmediğim bir alan o yüzden birkaç saat dahi olsa konuya yatırım yapamam.



    Şu anda belirtebileceğim tek şey, soketlerde gelen TCP paketleri / byte boyutundaki veriyi tekrar biraraya toparlamak (merge) için socket API'si içinde ilgil fonksiyonlar muhakkak olmalıdır. Yani o işlemi verinin başına ve sonuna özel karakter koymak, veri başında verinin toplam boyutu yazmak gibi elle yaparak olmaz, veya olsa da tekerleği yeniden icat etmiş giibi olursun.



    < Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 30 Mayıs 2018; 23:50:55 >
    < Bu ileti mini sürüm kullanılarak atıldı >




  • malesef pdf de gelen paketleri toparlamak hakkında bilgi bulamadım.(yeterli ingilizcem yüzünden olabilir)

    internette bu konuda recv all gibi fonksionlar var fakat onlarda tam anlamıyla işe yaramadı. eğer hala c++ ile ilgili isen verdiğim kaynak üzerinden yardımcı olur musun?

    soket kütüphanesinde bütün paketleri almak gbi bir fonksion da bulamadım.
  • Neden C++ veya neden C# değil? Ben C#'da soket programlama ile bir program yapmıştım. Ancak bunun için soket.io isminde bir hazır kütüphane kullanmıştım. Youtube' da bir video bulmuştum. Onun linkinden indirmiştim. Videodaki örnek uygulama üzerine kurmuştum.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Amaç nedir? bitti artık soketlerle network programlama. Client-server kalmadı. Bir web server kuruyorsun, html+javascript+php ile her işini görüyorsun. Üzerinde çalıştığın kodu en son 1996 yılında falan görmüştüm. Boş işler bunlar, ingilizcede procrastination denir, esas üzerinde çalışman gereken ama gerçekte seni aşan konuları ötelemek için kendini boş işlerle meşgul etme hastalığıdır.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: seyfi84

    Amaç nedir? bitti artık soketlerle network programlama. Client-server kalmadı. Bir web server kuruyorsun, html+javascript+php ile her işini görüyorsun. Üzerinde çalıştığın kodu en son 1996 yılında falan görmüştüm. Boş işler bunlar, ingilizcede procrastination denir, esas üzerinde çalışman gereken ama gerçekte seni aşan konuları ötelemek için kendini boş işlerle meşgul etme hastalığıdır.
    Hem katılıyorum hem de katılmıyorum, hem doğru düşünce hem de yanlış. :) Temeli öğrenmeden direkt hazıra konmak öğretmez ki bir şey. Gerçi sırf bu konu hakkında sayfalarca yazılmış makaleler var. Python'da Django başlatmadan önce, Socket nedir, nasıl çalışır, embedded olarak nasıl çalışır, paketler nasıl haberleşir vb. gibi konuları araştırmak lazım tabii kiönce. Bunları öğrendikten sonra tekerleği tekrar icat etmeye gerek yok eğer Google değilseniz. C++ da milyonlarca sunucu var şuan, gameserver, loadbalancers, vb. her yerde kullanılıyor hala sonuçta.




  • arkadaşlar değerli yorumlarınız için teşekkür ederim.

    c++ ile yapıyorum çünkü bu dil daha uygun geliyor bana. socket programlamanın bittiğini düşünmüyorum. zira ihtiyaçlara göre çözümler üretilir. web servis belirli ihtiyaçlara cevap verir. ileri seviye bir soket kütüphanesi güzel bir çözüm fakat kendine göre sıkıntıları var.

    ben c++ uygulamamı bana en yakın düzeyde kavrayarak ilerlemek istiyorum.

    sorun hala devam ediyor. görüşlerinizi dikkate alıyorum ve bana bir şeyler katıyor.

    tekrar teşekkür ederim esen kalın :)



    < Bu mesaj bu kişi tarafından değiştirildi exe676 -- 2 Temmuz 2018; 15:28:9 >
  • Parçaları birleştirmek çok zor mu? Array içine gelen veriyi vector gibi birşeye koyarak halledemez misin?
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.