Client - client communication without server?

你说的曾经没有我的故事 提交于 2020-07-18 06:05:13

问题


I am new to socket programming and I need to clarify some things.

Do you need a server between two client communication? Let me explain what I mean:

Example 1:

  1. Client1: Server, I want to talk with a client2
  2. Server: No problem. Let's just wait until he sends the request to connect
  3. Client2: I'm here. I want to talk with client1.
  4. Server: Okay Client1 here is Client2 IP address. And for you Client2, here is

Client1 IP Address. You can now talk to each other without me.

Example 2:

  1. Client1: Server, please send client2 a message: "Hey client2. How are you?"
  2. Server: Okay no problem. Sending message to client2
  3. Client2: Server thanks for sending client1's message. Send him a reply: "Hey, I'm fine."
  4. Server: Sending message to client1..

So my question is: Do you need a server after you met two clients together to communicate between them? Or I'm on completely wrong track?

EDIT:

The purpose behind this is that I want to expand my very simple mobile game to become a multiplayer. Just for example, I want to show PACMAN2 on PACMAN1 mobile phone and vice versa.


回答1:


yes, you can do with peer to peer communication does not need any central server or you can also use sockect or you can communicate with user ip address.

Ref peer to peer




回答2:


Having the two client applications could theoretically communicate directly and this could work in a LAN but in practice it is unlikely. The main reason this won't work is that in many cases the IP address of client 1/client 2 that the server "sees" is actually the IP address of the network gateway for client 1/client 2 which means that client 1 cannot initiate a connection to client 2. Also you can have the firewall on client 2 machine (or its network) blocking the connection initiated from client 1.

You might find useful information if you read more on XMPP.




回答3:


To put what Kevin Kal said into a answer: no you do not necessarily need a server for Client1 and Client2 to talk to each other. If you use the server in your example to send the necessary data (IP and port) to Client1, Client1 can connect to Client2 via a socket Client2 listens to (and as Kevin said, this makes Client2 into a server, strictly speaking.)

If you want to know more about Client to Client connections in java here's a really good answer to a similar question:

Connect two client sockets




回答4:


If you are using a TCP socket programming, you need central server to facilitate communication between clients.

Reason - You cannot connect to a port on one client from every other client. All clients can connect to one server on a particular port and server can facilitate the communication among clients.

If you move away from socket programming and use advanced features like Messaging; peer to peer communication and broadcasting of messages to multiple clients can be achieved.

EDIT:

Still I prefer TCP over UDP for these reasons especially Reliability

In your case of multi player games, still your clients need to be connected to server on dedicated socket. Since you have to use TCP anyway, server can take care of sending messages between clients with client id.



来源:https://stackoverflow.com/questions/32630989/client-client-communication-without-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!