Nếu client được viết để dùng một cổng cục bộ cố định, client thứ hai trên cùng PC sẽ không dùng được cổng đó hoặc phải chia gói tin nhận được với client thứ nhất.
Vì sao Hai client cùng mở một cổng UDP cục bộ (dùng tùy chọn reuse để ép dùng chung) → Dẫn đến OS chỉ chuyển gói tin đến cho một socket, hoặc không bảo đảm bên nào nhận. Router và server cũng thấy hai client là cùng một địa chỉ → Trên màn hình Một bên không nhận được gói tin thế giới nên NPC và người chơi khác không hiển thị, hoặc bị mất kết nối
Phụ trách chính Phát triển client (Đội phát triển game) · Phối hợp Phát triển server (Đội phát triển game)
Việc cần làm (Đội phát triển game)
Client: để OS tự chọn cổng cục bộ (bind cổng 0). Server: phân biệt kết nối bằng session token cấp cho từng kết nối.
Trên đồ thị
Chỉ một phần cao · Số gói tin nhận theo client
Chỗ cần xem
Trên PC của người chơi, bật cả hai client rồi chạy netstat -ano -p udp trong Command Prompt để xem cổng UDP cục bộ mà từng tiến trình game (PID) mở. Phía server: kiểm tra hai phiên có vào từ cùng IP công cộng, cùng cổng không
Đúng nếu
hai tiến trình game bị gắn vào cùng một cổng cục bộ, hoặc trên server hai phiên hiện cùng IP và cổng. Chỉ bật một bên thì bình thường
Loại trừ nếu
hai client dùng hai cổng cục bộ khác nhau mà một bên vẫn bất thường → xem lỗi phân biệt phiên theo IP hoặc thiết bị, hoặc giới hạn chạy nhiều client
Cách kiểm tra
Kiểm tra ở môi trường phía người chơi
Nguồn
Using SO_REUSEADDR and SO_EXCLUSIVEADDRUSEMicrosoft Gọi bind lần thứ hai vào cùng một cổng bằng SO_REUSEADDR sẽ chiếm luôn cổng, và không thể biết socket nào sẽ nhận gói tin
bind function (winsock.h)Microsoft Gọi bind với cổng 0 thì được cấp một cổng riêng trong dải cổng động (49152–65535)
netstatMicrosoft -a hiển thị cổng TCP, UDP; -n hiển thị địa chỉ dạng số; -o hiển thị ID tiến trình (PID); -p udp chỉ hiển thị UDP