我正在做一个带有套接字的聊天桌面应用程序,我的目的是在客户端之间创建一个对等通信。我的问题是:
如果我有所有的IP地址,我能同时连接他们之间的客户端吗?
在我的项目中,每个客户端都有服务器套接字和套接字(客户端)。
例如,client_1在端口1001中侦听连接,但同时也可以连接到具有不同IP-s的其他客户端,并侦听不同的端口。
现在我想知道的是,如果有经验的人能告诉我,如果我连接到一个客户端,而另一个客户端与我连接,那么是否有可能连接到某个客户端,同时接收来自其他客户端的消息呢?
如果Client_A监听端口1001,却想与Client_B聊天,而不是通过指定自己的IP和端口将自己连接到Client_B;现在,Client_A可以同时接收来自连接到他端口的其他客户端的消息吗?
如果有人能帮助我,我也可以发布我的代码;但我认为这是我必须解决的逻辑问题。
非常感谢。
发布于 2014-04-25 20:04:59
听起来您正在为套接字体系结构而挣扎。架构中的每个套接字对将由一对唯一的IP地址决定。维基百科说
通信本地和远程套接字称为套接字对。每个套接字对由一个唯一的4元组描述,它由源和目标IP地址和端口号组成,即本地和远程套接字地址。3.4如上文所讨论的,在TCP情况下,每个唯一的套接字对4元组都分配了一个套接字编号。
此外,根据这个堆叠溢出的答案
简单地说,如果我从客户端连接同一台web服务器两次,那么从我的角度来看,这两个连接将有不同的源端口和与web服务器的目标端口。因此,即使这两个连接都有相同的源IP地址和目标IP地址,也不会有歧义。
您的点对点聊天客户端网络绝对可以工作,而且客户确实可以将他们收到的消息联合到其他客户端。很可能您希望用GUID标记每条消息,这样客户端就不会多次处理相同的消息。
也许更有用的架构是发布/子体系结构。实时网络(如PubNub )允许您将消息发布到全局通道,并在订阅该通道的客户端上接收这些消息。在您的例子中,使用他们的Java发布消息非常简单:
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);我希望这能帮到你。干杯!
https://stackoverflow.com/questions/23297376
复制相似问题