我正在为Android聊天应用程序,我目前有2部电话,其最终必须为几千个用户的工作测试。
问题
我得到一个ConnectionException说:“连接被拒绝”每当2个手机,请尝试通过套接字连接到对方。
当前设计
每部手机开始一个ServerSocket,调用accept()方法等待一些插座来连接,并取其手机先发送一个消息,将创建一个客户端的Socket。我确定我使用的IP地址是正确的(它们实际上都使用相同的外部IP)。 我相信问题是与端口。我随机生成一个端口号,如果它可以自由使用,我说ServerSocket s = new ServerSocket(randomPortNumber)
。
我觉得是这个问题
我觉得这是什么问题是这个端口号是一个坐在一个NAT路由器后面的来源。所以当一个Socket尝试使用类似Socket socket = new Socket(ip, serverSocketRandomPortNumber)
的方式连接到ServerSocket时,它将尝试连接到NAT路由器并为其提供此端口号,这将不起作用,因为路由器本身不在此端口上侦听,而是在后面的电话路由器是。
问题和想法
我的问题是,我该如何处理这个问题?
我必须改变我的设计吗?
如果我必须,我想的一个替代设计是在Web主机上使用单个ServerSocket,并使用它将客户端套接字发送的消息重定向到其他客户端套接字。
我在PHP来实现服务器端沿着这些路线引用了一句: http://php.net/manual/en/sockets.examples.php
而且我仍然会使用Java客户端。
所以你说的是,由于端口转发并不可行,所以我们应该使用服务器。所以你可以告诉我服务器实际上做了什么。它如何帮助在不同网络中的两个设备之间进行通信。请原谅我,因为我在这里提问。我刚接触网络,无法找到任何资源。 – 2016-03-08 07:48:47