【发布时间】:2015-07-06 01:43:46
【问题描述】:
我正在开发 Connect 4 的在线版本,我希望能够将两台计算机连接在一起。
我对在 TcpClient 和 Listener 类的计算机之间创建网络有一定的了解,但据我所知,这些仅适用于连接到同一网络 (LAN) 的计算机
我希望能够在地球的另一个地方和我的妹妹一起玩connect 4,不管我们在哪个局域网上。
这可能吗?
【问题讨论】:
标签: c#
我正在开发 Connect 4 的在线版本,我希望能够将两台计算机连接在一起。
我对在 TcpClient 和 Listener 类的计算机之间创建网络有一定的了解,但据我所知,这些仅适用于连接到同一网络 (LAN) 的计算机
我希望能够在地球的另一个地方和我的妹妹一起玩connect 4,不管我们在哪个局域网上。
这可能吗?
【问题讨论】:
标签: c#
是的。
在 LAN 上连接两台计算机与通过 Internet 连接相同。唯一的区别是:
如果没有更具体的问题,我无法得到比这更详细的问题。
【讨论】:
看看 Jabber,它是一个即时通讯协议(由 Gtalk 使用)。连接公共jabber server 或设置您自己的 Jabber 主机。 Jabber-net 是 .NET 的库
你可以扩展它来做几乎所有你想做的事情,包括游戏等。
【讨论】:
TcpClient 将能够连接到 Internet 上任何地方的套接字。但是,防火墙或 NAT-ed 网络可能会阻碍。您必须确保至少有一个人拥有可公开访问的 IP 地址和开放端口。
由于您正在编写此游戏,您可能会考虑编写一个仅服务器应用程序,该应用程序将允许两个人从防火墙后面进行连接。然后,您只需想办法托管它。
【讨论】:
那也是我写的第一款网络游戏。
这也许是可能的。问题是您可能必须在防火墙、路由器等上打开端口,以允许从一台计算机到另一台计算机的传入通信。这对专业人士来说也是个问题。
您最好的选择可能是创建一个具有众所周知地址的“游戏服务器”。具有域名的廉价网络服务器会很好地工作。一个应用程序使用 Web 服务向服务器发送消息,而另一个应用程序每秒检查一次以查找新消息。
【讨论】:
您可以使用 .NET 客户端和侦听器类连接到位于地球上任何地方的任何 IP 地址上的任何计算机。问题是您需要知道另一台机器的 IP 地址,并且它需要接受来自您的连接。
如果另一台机器位于防火墙后面,事情就会变得更加困难。防火墙将阻止未经请求的连接请求 - 包括来自您的机器与防火墙后面的另一台机器通信的请求。即时消息客户端一直存在这个问题——他们通过让连接的每一端与在两个连接之间中继数据的中间服务器通信来解决这个问题。
也就是说,您的机器可以向公共互联网上的机器发出呼叫,并且当您通过防火墙进行此类连接时,您的防火墙将允许您连接的机器回复您,但您不能直接连接到防火墙后面的另一台机器,除非您事先安排好,例如在防火墙上打开特定的 TCP/IP 端口号。
现在有 UPnP 等协议标准允许您的计算机请求本地防火墙为特定连接打开端口。如果另一端的计算机也这样做,那么就可以通过各自的防火墙在两台机器之间建立 TCP/IP 连接,如果你可以想办法通信端口互相编号。您需要将防火墙上打开的端口号发送到另一台计算机,他们需要将防火墙上打开的端口号发送给您。因此,您仍然需要某种中介来至少交换此连接信息,以便每一方都可以直接连接到另一方。
【讨论】:
为此构建一个网站/应用程序,然后您无需担心连接性。它也可以跨平台工作,尤其是。如果你避免闪光。
【讨论】:
如果您有网站,您可以调用网站上的页面并记录调用计算机的 IP 地址。在 PHP 中你可以这样做:
$Calling_IP_Address = $_SERVER['REMOTE_ADDR'];
然后,将数据保存到文本文件中。当你想玩时,其中一个玩家需要调用网页来记录他们的 IP 地址,而另一个玩家读取保存的文本文件以找出连接的位置。
工作完成。
【讨论】: