1

我花了一些时间学习 Java 中的套接字编程,并设法制作了几个使用套接字的简单应用程序。(即时通讯,井字游戏,基本的东西)对于我的程序,我使用了 ServerSocket 和 Socket 类的客户端-服务器关系。到目前为止,我一直在同一台机器上测试我所有的游戏,这意味着客户端和服务器都在同一台机器上运行,并且我使用的套接字 ip 是 127.0.0.1。现在我想用同样的逻辑制作一个局域网游戏。一台计算机将是服务器,另一台计算机将是客户端。

我想问的问题,如果这是一个愚蠢的问题,请原谅我,我并没有真正接受过网络等方面的教育,但是在什么情况下我可以在两台机器之间建立套接字连接。我的意思是,我在一台计算机上运行我的套接字服务器,我希望另一台计算机上的套接字使用第一台计算机的 ip 进行连接。比如说,我的 ip 是“192.1.1.4”,我希望能够连接到那台计算机。是否可以在世界上任意两台计算机之间建立这样的连接?我知道“lan”代表“局域网”,但除此之外我对此一无所知。抱歉,这是一个愚蠢的问题,如果有人需要我,我可以澄清一下。

基本上,我必须在两台机器上满足什么标准才能使用 Java 程序在它们之间建立套接字连接?

4

4 回答 4

5

您可以在以下之间建立 TCP/IP 连接:

  • 同一局域网中的两台机器(私有 IP)
  • 两台公网IP(互联网)的机器
  • LAN 中的机器和具有公共 IP 的机器,前提是从 LAN 到公共 IP 的连接已打开

您不能从 LAN 外部打开与 LAN 内部机器的直接 TCP/IP 连接,除非网关配置为将连接重定向到该机器的特定端口。

于 2012-08-09T19:02:10.820 回答
1

在内部网络上,您按照您所说的进行操作,客户端使用服务器的 IP 地址或给定端口上的主机名连接到服务器。

由于防火墙和 NAT,通过 Internet 可能会很棘手。例如,您的计算机在家庭网络上的 ip 地址可能在“192.168.0.xxx”的某处 - 但如果您访问: http: //www.whatismyipaddress.com,您会看到您面向互联网的 ip地址完全不同。您将看到的基本上是您的路由器在互联网 (WAN) 上的 IP 地址。

所以基本上,服务器必须在他们的路由器上为你的游戏端口设置端口转发到他的计算机。然后他必须向客户提供他面向互联网的 IP 地址以进行连接。

于 2012-08-09T19:00:09.020 回答
0

建立连接的主要标准 - 忽略许多可能的因素,如防火墙配置等 - 是两台机器只是在同一个网络上。您可能知道以 192.168 开头的 IP 地址。.总是指本地网络上的计算机,这就是您要询问的情况,所以如果您有两台计算机连接在本地网络上(例如通过路由器),并且您知道每台计算机的 IP 地址,那么它真的就是这么简单 - 您可以使用迄今为止一直使用的相同方式进行连接。事实上,这同样适用于互联网——即使你在世界不同的地方设置了两台机器并且你知道它们的 IP 地址(同样,忽略潜在的更重要的防火墙问题),过程完全相同。这正是互联网被证明具有如此可扩展性的原因,因为定位具有特定 IP 地址的机器的过程由网络堆栈的较低层处理。

tl; dr:这与您已经在做的事情相同,只是使用了适当的 IP 地址。

于 2012-08-09T19:03:41.913 回答
0

you can use a public IP address and you don't have to change anything about your own address, this is handled by your router that connects to the internet. What you do have to consider is your firewall settings. The ports you are using in your socket should be added to your 'allowed' list. Normally "established" traffic is allowed by default. This means that you need to allow your incoming ports @ serverside to go to your server.

于 2012-08-10T09:07:03.513 回答