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

您如何使Java套接字与公共IP一起使用?

沙富
2023-03-14
问题内容

我可以毫不费力地使套接字与localips一起使用,但是一旦我更改了代码以使用公共ips,我就始终获得java.net.ConnectException。

我正在使用端口8084,据我所知,该端口未在其他地方使用在命令提示符中,netstat -a | grep
8084显示:文件STDIN:TCP用户9114eb19a8:8084用户9114eb19a8:0侦听

我进入路由器并确保它是开放的,我使用对http://www.whatismyip.org的请求获得了公共IP

服务器:

serverSocket = new ServerSocket (8084);

客户:

socket = new Socket (hostaddr, 8084); //hostaddr is a string containing my public-IP
//it works when the program is run on a localnetwork and I am using my local-ips

问题答案:

什么类型的路由器?不要忘记,即使路由器上可能已打开端口,您也需要使路由器将端口8084 转发
到目标计算机的内部IP,否则由于网络地址转换(NAT),路由器/防火墙不知道什么一旦到达那里就与交通有关。

例如,假设您的客户端PC位于加利福尼亚州,其IP为10.1.1.100,而路由器使用的是公共IP 70.62.50.42。

您的服务器PC位于纽约,其IP为192.168.1.121,位于内部IP为192.168.1.1和公共IP为40.20.26.63的路由器之后。您将需要确保进入路由器并将端口8084(TCP)转发到内部地址192.168.1.121(内部服务器PC)。

根据路由器的级别,该术语将是端口转发,虚拟IP或静态NAT转换(还有其他一些术语,但您可以理解)。

您无需调整客户端路由器上的任何设置,因为该路由器已经知道如何将您的请求路由到Internet。



 类似资料:
  • 问题内容: 我将使用IntelliJ Community Edition的Git版本控制来创建我打算开发的程序的分支。我正在努力使自己适应其功能,并且遇到了障碍。 我遵循网页 http://wiki.jetbrains.net/intellij/Using_Git_Locally上的说明,尽管我按其要求进行操作,但是当我到达Image5时,在Default(默认)下找到了一个空列表。 我认为这可能

  • 问题内容: 如何使用python2.7获取公共IP?不是私有IP。 问题答案: 当前有几种选择: ip.42.pl jsonip.com httpbin.org ipify.org 以下是可以利用上述每种方法的确切方法。 ip.42.pl 这是我找到的第一个选项。对于脚本来说非常方便,您不需要在这里进行JSON解析。 jsonip.com 似乎该域的唯一目的是返回JSON中的IP地址。 httpb

  • 我有两个真实的IP地址220.xx.xxx.xxx在我的工作场所。我试着做了一个简单的java tcp服务器程序和android tcp客户端程序。Android客户端正常工作时: 服务器和仿真器程序在同一台pc上。 一台具有真实IP地址的电脑中的服务器位于另一台具有真实IP地址的电脑中 服务器和仿真器都位于同一台pc或不同pc或设备的专用网络下 在以下情况下不工作: 客户端是一个具有wifi或3

  • 问题内容: 我知道这是一个基本问题,但是如果这个问题太愚蠢了,我似乎找不到答案,我很抱歉,但是我们开始: 我应该使用SQL Server(到目前为止没有问题)和Java(喜欢Java,这里也没问题),但是现在:我应该怎么做才能使组合起作用?我得到了: JRE 1.6 和 sqljdbc4.jar …在将sqljdbc4.jar放入我的类路径之前,我已经在其中添加了sqljdbc.jar并通过测试程

  • 我有一个Angular应用程序,有一个API,它连接并调用一个在服务器上建立的数据库,该数据库具有一个公共IP。 第二,你有什么想法为什么会发生这种情况吗? 谢谢。

  • 问题内容: 考虑以下代码: 该程序的输出为: 当然,当我从外壳运行时,它可以按预期工作: 互联网告诉我,由于管道行为不是跨平台的事实,在生产Java的Java工厂工作的才华横溢的人无法保证管道能正常工作。 我怎样才能做到这一点? 我不会使用Java构造而不是grepand 来进行所有解析sed,因为如果我想更改语言,将被迫用该语言重新编写解析代码,这完全是不行的。 调用Shell命令时,如何使Ja