套接字对等

时间:2014-04-25 15:35:47

标签: java sockets p2p

我正在使用套接字进行聊天桌面应用,我的目的是在客户端之间创建点对点通信。我的问题是:

如果我拥有所有IP地址,我可以同时连接它们之间的客户端吗?

在我的项目中,每个客户端都有服务器套接字和套接字(客户端)。

例如,client_1在端口1001中侦听连接,但同时可以连接到具有不同IP-s的其他客户端并侦听不同的端口。

现在我想知道的是,如果有经验的人可以告诉它,是否有可能连接到某个客户端,同时如果我连接到一个客户端但其他人连接到我那么接收来自其他客户端的消息?

如果Client_A侦听端口1001但想与Client_B聊天,则通过指定其IP和端口将自己连接到Client_B;现在,Client_A可以同时收到连接到其端口的其他客户端的消息吗?可能吗?

如果有人可以帮助我,我也可以发布我的代码;但我认为这是一个我必须在这里解决的逻辑问题。

非常感谢。

1 个答案:

答案 0 :(得分:2)

听起来你正在与套接字架构进行一些努力。架构中的每个套接字对将由一对唯一的IP地址确定。 Wikipedia says

  

通信本地和远程套接字称为套接字对。每   套接字对由一个独特的4元组描述,包括源和   目标IP地址和端口号,即本地和远程   套接字地址。3 [4]如上面的讨论所示,在TCP中   在这种情况下,为每个唯一的套接字对4元组分配一个套接字号

此外,根据this stackoverflow answer

  

简单地说,如果我从客户端连接到同一个Web服务器两次,那么   从我的角度来看,两个连接将具有不同的源端口   来自Web服务器的目标端口。所以没有歧义,   即使两个连接都具有相同的源和目标IP   地址。

您的点对点聊天客户端网络绝对可以正常工作,客户端确实可以将他们收到的消息联合到其他客户端。您很可能希望使用GUID标记每条消息,以便客户端不会多次处理相同的消息。

也许更有用的架构是 pub / sub架构。诸如PubNub之类的实时网络允许您将消息发布到全局通道,并在订阅该通道的客户端上接收这些消息。在您的情况下,使用their Java SDK,发布消息非常简单:

Callback callback = new Callback() {
  public void successCallback(String channel, Object response) {
    System.out.println(response.toString());
  }
  public void errorCallback(String channel, PubnubError error) {
    System.out.println(error.toString());
  }
};
pubnub.publish("demo", "Hello World !!" , callback);

我希望这会有所帮助。干杯!