client to client ping - NAT punchthrough

Hi, is there any way to get client A to client B ping when they are connected to the same server?

I need a way to get the direct ping from client A to client B, without going through the server.

Can client A get the NetworkPlayer of client B, and use GetAveragePing(client B)?

Or is Ping(client B) the only way?
Because I believe client A is able to join client B if client B hosts a server,
but client A is unable to use Ping(client B). This could be because when joining client B (server),
NAT punchthrough is used, and when using Ping(), there is no NAT punchthrough.

Can I use RPC call from client A to client B? Does the RPC go directly from A to B,
or does it go from A to MasterServer / Server to B?
What is the real route?

Any ideas?
Thanks for help!

- Edit: (Sorry, I’ll be more specific to my problem)

Here is the problem I am having: (in steps)

  1. A hosts a server.

  2. B is able to join A with NAT punchthrough.

  3. A shuts down the server.

  4. A joins server C.

  5. B joins server C.

  6. B cannot Ping(A.ipAddress) in server C, because A does not have a public IP and A is behind a NAT.

How can I make B ping A directly when they are both on server C?

Or is it correct for B to do Ping(A.externalIP) in such a situation, which will give the proper ping value from B to A?

Please note - it turns out that this answer is not of much value for Initials actual question, but has some general info.

PRIME has included some extremely important info in his critical comments below. Hope it helps someone in the archived future :open_mouth:


Well there is only one (1) way to do any networking in Unity!

Simply use the RPC call

pls vote that answer up if useful :slight_smile:

When you say “server” there is a confusion:

Say four iPads are playing your game.

firstly you could mean the “boss” iPad which controls the others. If so, I strongly recommend you DO go via the “boss” iPad, but you don’t have to.

(Let me put it this way. For any real world networked gaming, the “boss” controls everything. Sure, as a technical demo, you can send a ping between any pair.)

secondly you could mean “a server on the internet”, like SmartFox or whatever.

There is absolutely no obligation at all to use a “a server on the internet” for multidevice gaming.

(Personally, I hate it - I only like MP games that allow ordinary “local networking” with your buddies in the room.)

If you do mean “a server on the internet” (A) there is utterly no reason to even use a “a server on the internet”, and (B) if you are using a “a server on the internet”, yes it is still possible and the norm to talk directly among the iPads, you don’t go via the “server on the internet”.

Again you just use RPC

#that’s the SECOND VERSION of RPC on the manual page…
.

for networking in Unity.

Here is the manual page