Arama butonu
Bu konudaki kullanıcılar: 1 misafir
9
Cevap
401
Tıklama
0
Öne Çıkarma
C++ Soket Sorunu
E
8 yıl (13 mesaj)
Er
Konu Sahibi

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 :)

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



T
8 yıl (20069 mesaj)
Yarbay

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ı >
Bu mesaja 1 cevap geldi.
E
8 yıl (13 mesaj)
Er
Konu Sahibi

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 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @revivo72
T
8 yıl (20069 mesaj)
Yarbay

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ı >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @exe676
E
8 yıl (13 mesaj)
Er
Konu Sahibi

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.




Bu mesajda bahsedilenler: @revivo72
I
8 yıl (158 mesaj)
Teğmen

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ı >

S
8 yıl (2420 mesaj)
Yüzbaşı

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ı >
Bu mesaja 1 cevap geldi.
D
8 yıl (513 mesaj)
Yüzbaşı

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.



E
8 yıl (13 mesaj)
Er
Konu Sahibi

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 >

T
8 yıl (15005 mesaj)
Yarbay

Parçaları birleştirmek çok zor mu? Array içine gelen veriyi vector gibi birşeye koyarak halledemez misin?



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.