当前位置: 首页 > 面试题库 >

Internet上的Java套接字超时

江建明
2023-03-14
问题内容

我创建了一个小型聊天程序,当客户端和服务器在同一台计算机(也可能是网络)上运行时,该程序可以完美运行。但是,一旦我尝试通过Internet连接到另一台计算机,套接字连接就会超时。这是由于防火墙/路由器等引起的吗?

以及如何通过互联网连接ServerSocket和套接字?


问题答案:

但是,一旦我尝试通过Internet连接到另一台计算机,套接字连接就会超时。这是由于防火墙/路由器等引起的吗?

是的,很有可能。您遇到了
NAT
问题:从本质上讲,相同的外部可见IP地址映射到许多内部可见端点,而外部端点不知道向您的套接字请求发送哪个内部端点。

解决此问题的最简单方法是让 您的两个客户都连接到他们都能看到 的第三方,然后让第三方来协调通信。例如,这就是大多数即时消息协议的工作方式。

如果您无法控制这样的第三方实体,则直接连接两个客户端的另一种方法是让两个客户端都打开一个商定的端口,然后将该端口上的通信映射到他们自己的内部端点。这提供了外部可见的终结点(例如,您的家庭路由器)将通信传递到其预期目标所需的缺失链接。



 类似资料:
  • 这很好,但没有SSL。 我已经使用OpenSSL为服务器和客户机生成了SSL证书,结果是: 服务器的证书(PEM格式) 客户端的证书(PEM格式) 服务器的私钥(PEM格式) 客户端的私钥(PEM格式) CA文件(PEM、CER和CRT格式) null 会出什么问题?

  • 问题内容: 我试图呼吁一个非常繁重的过程。平均工作时间估计为9-10分钟。 当我执行该过程时,我为一个巨大的数字设置了超时时间:99999999。 2分钟后,出现以下错误: java.net.SocketTimeoutException:读取超时 我尝试对其进行更多处理,并将超时设置为3000,并且在预期的3秒钟后出现了相同的错误。 您对为什么将其设置为最大120000 有任何想法吗? 问题答案:

  • 一些背景: 我有一个使用3G或4G数据连接的Android应用程序。但它也连接到一个wifi热点,以便在热点设备和应用程序之间传输一些数据。 我想做的是:创建一个到这个wifi热点的套接字连接,并通过这个套接字发送/接收数据。 我添加了以下代码,以确保我们在创建套接字时使用wifi热点wifi(否则它有时最终会使用数据连接): 这似乎没问题。但是,我在尝试连接到远程服务器地址时发现问题。下面是我正

  • 问题内容: 我想将数据发送到服务器,然后等待一分钟,然后关闭套接字。 怎么做? 问题答案: 你可以试试看 根据您的情况更改套接字的超时!此代码将发送一条消息,然后等待接收消息,直到达到超时!

  • 在套接字最终接受另一端消失的情况下,什么指定了这个超时?是操作系统(Ubuntu 11.04),还是来自TCP/IP规范,还是套接字配置选项?

  • 如果主机名是正确的,但没有套接字服务器侦听端口,这行可能会在引发异常前几分钟工作。我可以设置通信超时吗?此外,是否可以停止此进程-目前它不响应AsyncTask.Cancel调用。