Çözüldü Paketler nasıl aktarılıyor?

  • Konuyu açan Konuyu açan hasanmacit
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 15
  • Gösterim Gösterim 145
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

hasanmacit

discord: hasanmacit
Süper Moderatör
Geliştirici
Yardımsever Üye
Mesaj
4.377
Çözümler
183
Beğeni
3.939
Puan
1.850
Ticaret Puanı
3
Oyun paketleri aktarırken hangi sistemi kullanıyor, nasıl bir yol izliyor, oyuna girdiğimde bir yere move atmak için tıkladığımda paketin yolculuğu nasıl oluyor bu network ağına ne isim veriliyor bunları detaylandırabilecek birisi var mı?
 
Çözüm
Senin için bunu ChatGPT'ye sordum, gayet güzel anlattı eksik yerleri de ben yamaladım al sana cevap. 😄

ChatGPT 4:
Genişlet Daralt Kopyala
Metin2 gibi çok oyunculu çevrimiçi oyunlar, server-client mimarisi kullanarak çalışır ve iletişim için TCP (Transmission Control Protocol) gibi güvenilir protokolleri kullanır. Bu tür oyunlarda, server ve client arasında veri paketleri gönderilir ve alınır. TCP, bu veri iletimini güvenilir ve sıralı bir şekilde sağlar. Şimdi, Metin2 oyunundaki bir hareket (move) paketinin nasıl işlendiğini adım adım inceleyelim.

1. Adım: Client Tarafında Hareket
Oyuncu karakteri ile bir adım attığında, bu hareket client tarafında bir olay olarak algılanır. Bu olay, oyun motoru tarafından işlenir ve gerekli bilgiler paketlenir.

2. Adım: Paket Hazırlama
Hareket komutu, client tarafında bir paket haline getirilir. Bu paket, genellikle aşağıdaki bilgileri içerir:

Oyuncu kimliği (ID)
Hedef konum (x, y, z koordinatları)
Hareket tipi (yürüme, koşma vb.)
Zaman damgası (timestamp)
Bu bilgiler, belirli bir formatta (protokol) paketlenir.

3. Adım: TCP Bağlantısı Üzerinden Gönderim
Hazırlanan paket, TCP bağlantısı kullanılarak server'a gönderilir. TCP, paketlerin güvenilir bir şekilde iletilmesini sağlar. TCP, her paket için bir doğrulama (acknowledgement) alarak paketlerin kaybolmasını veya sırasının bozulmasını engeller.

4. Adım: Server Tarafında Alım ve İşleme
Server, client'tan gelen hareket paketini TCP bağlantısı üzerinden alır. Paket alındıktan sonra, aşağıdaki işlemler gerçekleştirilir:

Paket doğrulama: Paketin geçerliliği kontrol edilir. (Örneğin, oyuncu ID'si ve zaman damgası kontrol edilir)
Hareketin işlenmesi: Hedef konuma göre oyuncu karakterinin yeni konumu hesaplanır.
Durum güncelleme: Oyuncu karakterinin yeni konumu server'da güncellenir ve bu bilgi tüm diğer ilgili client'lara iletilir.
5. Adım: Diğer Client'lara Bilgilendirme
Server, oyuncunun hareketini diğer client'lara bildirmek için yeni paketler oluşturur ve TCP bağlantısı üzerinden bu paketleri diğer client'lara gönderir. Bu paketler, hareket eden oyuncunun yeni konumunu ve hareket tipini içerir.

6. Adım: Diğer Client'ların Güncellenmesi
Diğer client'lar, server'dan gelen paketleri alır ve kendi oyun motorları tarafından bu paketleri işleyerek ekranlarındaki oyuncu hareketlerini günceller.

TCP ve Socket Sistemi
Metin2 gibi oyunlarda, server ve client arasındaki TCP bağlantısı birer "socket" üzerinden kurulur. Socket, iki cihaz arasında veri iletişimini sağlayan uç noktadır. TCP bağlantısı kurulduğunda, client ve server arasında iki socket oluşturulur:

Client Socket: Client tarafında bağlantıyı temsil eden socket.
Server Socket: Server tarafında bağlantıyı temsil eden socket.
Bu socket'ler üzerinden veri paketleri gönderilir ve alınır. TCP'nin sağladığı güvenilirlik sayesinde paketlerin eksiksiz ve doğru sırayla iletilmesi sağlanır.

Örnek Paket İşlemi
Oyuncu bir adım attığında:

Client'ta olay algılanır ve paket hazırlanır.
Hazırlanan paket, client socket üzerinden server'a gönderilir.
Server, server socket üzerinden paketi alır ve işleme koyar.
Server, diğer client'lara oyuncunun yeni konumunu bildiren paketler gönderir.
Diğer client'lar bu paketleri alır ve kendi ekranlarını günceller.
Bu süreç, oyun boyunca sürekli olarak tekrarlanır ve oyuncuların hareketleri, etkileşimleri ve diğer oyun içi olaylar bu şekilde işlenir ve iletilir. TCP ve socket sistemleri, bu iletişimin güvenilir ve hızlı bir şekilde gerçekleşmesini sağlar.
 
Senin için bunu ChatGPT'ye sordum, gayet güzel anlattı eksik yerleri de ben yamaladım al sana cevap. 😄

ChatGPT 4:
Genişlet Daralt Kopyala
Metin2 gibi çok oyunculu çevrimiçi oyunlar, server-client mimarisi kullanarak çalışır ve iletişim için TCP (Transmission Control Protocol) gibi güvenilir protokolleri kullanır. Bu tür oyunlarda, server ve client arasında veri paketleri gönderilir ve alınır. TCP, bu veri iletimini güvenilir ve sıralı bir şekilde sağlar. Şimdi, Metin2 oyunundaki bir hareket (move) paketinin nasıl işlendiğini adım adım inceleyelim.

1. Adım: Client Tarafında Hareket
Oyuncu karakteri ile bir adım attığında, bu hareket client tarafında bir olay olarak algılanır. Bu olay, oyun motoru tarafından işlenir ve gerekli bilgiler paketlenir.

2. Adım: Paket Hazırlama
Hareket komutu, client tarafında bir paket haline getirilir. Bu paket, genellikle aşağıdaki bilgileri içerir:

Oyuncu kimliği (ID)
Hedef konum (x, y, z koordinatları)
Hareket tipi (yürüme, koşma vb.)
Zaman damgası (timestamp)
Bu bilgiler, belirli bir formatta (protokol) paketlenir.

3. Adım: TCP Bağlantısı Üzerinden Gönderim
Hazırlanan paket, TCP bağlantısı kullanılarak server'a gönderilir. TCP, paketlerin güvenilir bir şekilde iletilmesini sağlar. TCP, her paket için bir doğrulama (acknowledgement) alarak paketlerin kaybolmasını veya sırasının bozulmasını engeller.

4. Adım: Server Tarafında Alım ve İşleme
Server, client'tan gelen hareket paketini TCP bağlantısı üzerinden alır. Paket alındıktan sonra, aşağıdaki işlemler gerçekleştirilir:

Paket doğrulama: Paketin geçerliliği kontrol edilir. (Örneğin, oyuncu ID'si ve zaman damgası kontrol edilir)
Hareketin işlenmesi: Hedef konuma göre oyuncu karakterinin yeni konumu hesaplanır.
Durum güncelleme: Oyuncu karakterinin yeni konumu server'da güncellenir ve bu bilgi tüm diğer ilgili client'lara iletilir.
5. Adım: Diğer Client'lara Bilgilendirme
Server, oyuncunun hareketini diğer client'lara bildirmek için yeni paketler oluşturur ve TCP bağlantısı üzerinden bu paketleri diğer client'lara gönderir. Bu paketler, hareket eden oyuncunun yeni konumunu ve hareket tipini içerir.

6. Adım: Diğer Client'ların Güncellenmesi
Diğer client'lar, server'dan gelen paketleri alır ve kendi oyun motorları tarafından bu paketleri işleyerek ekranlarındaki oyuncu hareketlerini günceller.

TCP ve Socket Sistemi
Metin2 gibi oyunlarda, server ve client arasındaki TCP bağlantısı birer "socket" üzerinden kurulur. Socket, iki cihaz arasında veri iletişimini sağlayan uç noktadır. TCP bağlantısı kurulduğunda, client ve server arasında iki socket oluşturulur:

Client Socket: Client tarafında bağlantıyı temsil eden socket.
Server Socket: Server tarafında bağlantıyı temsil eden socket.
Bu socket'ler üzerinden veri paketleri gönderilir ve alınır. TCP'nin sağladığı güvenilirlik sayesinde paketlerin eksiksiz ve doğru sırayla iletilmesi sağlanır.

Örnek Paket İşlemi
Oyuncu bir adım attığında:

Client'ta olay algılanır ve paket hazırlanır.
Hazırlanan paket, client socket üzerinden server'a gönderilir.
Server, server socket üzerinden paketi alır ve işleme koyar.
Server, diğer client'lara oyuncunun yeni konumunu bildiren paketler gönderir.
Diğer client'lar bu paketleri alır ve kendi ekranlarını günceller.
Bu süreç, oyun boyunca sürekli olarak tekrarlanır ve oyuncuların hareketleri, etkileşimleri ve diğer oyun içi olaylar bu şekilde işlenir ve iletilir. TCP ve socket sistemleri, bu iletişimin güvenilir ve hızlı bir şekilde gerçekleşmesini sağlar.
benim aslında merak ettiğim şey şu. bu kadar şey packet.h üzerinden dönmüyordur. bu paket alışverişlerini sağlayan kodlar neler onları merak ediyorum ben.
 
benim aslında merak ettiğim şey şu. bu kadar şey packet.h üzerinden dönmüyordur. bu paket alışverişlerini sağlayan kodlar neler onları merak ediyorum ben.
Senin görmek istediğin şekilde alışverişi sağlayan kodlar yok, sorun orada. :ROFLMAO: Sen C++ ile bir oyun kodladığında server ve clienti ayrı olarak kodluyorsun, iki tarafında aktarılan paketleri algılayabilmesi için paket headerı oluşturuyorsun, paketlerin ne işe yaradıklarını oyuna anlatan fonksiyonlar yazıyorsun ve bu paketlerin gönderimi için bir protokol seçiyorsun (Bu durumda TCP kullanıyoruz, çoğunlukla TCP tercih edilir ama UDP'de var) ve paketleri server-client arası socketler ve protokoller yardımıyla alıp veriyorsun, Koray'ın değiştirmeyi vaat ettiği şey paket iletişimini düzenleyen sistem, Metin2 homemade ilkel bir versiyonunu kullanıyor ama artık çok daha modern yöntemler var mesela Aeldra'nın kullandığı Google menşeili protobuf var.
 
Senin görmek istediğin şekilde alışverişi sağlayan kodlar yok, sorun orada. :ROFLMAO: Sen C++ ile bir oyun kodladığında server ve clienti ayrı olarak kodluyorsun, iki tarafında aktarılan paketleri algılayabilmesi için paket headerı oluşturuyorsun, paketlerin ne işe yaradıklarını oyuna anlatan fonksiyonlar yazıyorsun ve bu paketlerin gönderimi için bir protokol seçiyorsun (Bu durumda TCP kullanıyoruz, çoğunlukla TCP tercih edilir ama UDP'de var) ve paketleri server-client arası socketler ve protokoller yardımıyla alıp veriyorsun, Koray'ın değiştirmeyi vaat ettiği şey paket iletişimini düzenleyen sistem, Metin2 homemade ilkel bir versiyonunu kullanıyor ama artık çok daha modern yöntemler var mesela Aeldra'nın kullandığı Google menşeili protobuf var.
protokolün kodları nerde ozaman? yada aeldranın protobuf modülünü nasıl inceleyebiliriz?
 
Çözüm
bu recvofflineshop gibi paketler o işlevi görüyor demek hee
Aeldra'nın warez olan 2020 dosyalarını bir incele bak, protobuf'ı entegre etmişler neredeyse her şeyi değiştirmeleri gerekmiş ama o çok daha sağlıklı, iletişimi çok daha güvenli yapıyor mesela internet kaynaklı veya yoğunluk kaynaklı paket hatalarını neredeyse bitirir protobuf ama Ymir'in ev yapımı sistemde bu hatadan kurtulmak çok zor.
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst