Bentrok port UDP tetap Two clients bound to the same local UDP port
ID penyebab pt-port-collision · Penanggung jawab utama Pengembangan klien (Tim Pengembang Game) · Turut terlibat Pengembangan server (Tim Pengembang Game)
Jika klien dibuat untuk memakai port lokal yang tetap, klien kedua di PC yang sama tidak bisa memakai port itu atau harus berbagi paket dengan klien pertama.
Mengapa Dua klien mencoba membuka port UDP lokal yang sama (dipaksa berbagi dengan opsi reuse) → Akibatnya OS hanya meneruskan paket masuk ke salah satu socket, atau tidak menjamin socket mana yang menerimanya. Router dan server juga melihat kedua klien sebagai alamat yang sama → Di layar Salah satu klien tidak menerima paket dunia game, sehingga NPC dan pemain lain tidak terlihat atau terjadi disconnect
Penanggung jawab utama Pengembangan klien (Tim Pengembang Game) · Turut terlibat Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Klien: biarkan OS memilih port lokal secara otomatis (bind ke port 0). Server: bedakan koneksi dengan token sesi yang diterbitkan untuk setiap koneksi.
Di grafik
Hanya sebagian yang tinggi · Jumlah paket yang diterima per klien
Yang diperiksa
Di PC pemain, dengan kedua klien menyala, jalankan netstat -ano -p udp di Command Prompt untuk melihat port UDP lokal yang dibuka setiap proses game (PID). Di sisi server, periksa apakah kedua sesi masuk dari IP publik dan port yang sama
Cocok jika
Kedua proses game terikat ke port lokal yang sama, atau di server kedua sesi terlihat dari IP dan port yang sama. Normal jika hanya satu klien yang dinyalakan
Tidak cocok jika
Kedua klien memakai port lokal yang berbeda, tetapi salah satunya tetap bermasalah: lebih mungkin bug pembedaan sesi berdasarkan IP atau perangkat, atau pembatasan multi-klien
Sarana pemeriksaan
Lingkungan pemain sendiri
Sumber
Using SO_REUSEADDR and SO_EXCLUSIVEADDRUSEMicrosoft Bind kedua ke port yang sama dengan SO_REUSEADDR merebut port itu, dan tidak bisa dipastikan socket mana yang menerima paket
bind function (winsock.h)Microsoft Jika bind dilakukan ke port 0, port unik dialokasikan dari rentang port dinamis (49152–65535)
netstatMicrosoft -a menampilkan port TCP dan UDP, -n alamat dalam bentuk angka, -o ID proses (PID), dan -p udp hanya UDP
Lihat juga
Lapisan yang sama: Masalah yang hanya dialami sebagian pemain