2010-09-01 113 views
1

我想在C#中创建应用客户端服务器,但不仅在局域网中。在这里很容易:TcpListener,TcpClient等通过广域网进行通信

我想在这个例如 在我的计算机上是等待连接的服务器。 另一个网络中的某个人有客户端。他开始连接,但是......在哪里......什么是服务器的IP? 他只看到路由器的ip。

任何想法? :)

编辑

大问题,也是双NAT

回答

1

你仍然使用相同的TcpListener和TcpClient的(如果你想它是低电平)。

通过WAN进行通信的技术与通过LAN进行通信的技术相同。困难的部分是让客户端和服务器之间的网络允许您使用必要的端口和协议。

+0

是的,这是真的,但这是怎么回事? :) – Saint 2010-09-01 19:06:29

+0

@Saint_pl - 您必须与网络管理员交谈,或者如果您位于家庭网络中,请了解如何配置网络硬件以不阻止流量并转发您要使用的端口的流量。 – 2010-09-01 19:31:30

+0

不,我知道如何在我的路由器上转发端口,但问题不在这里。请看下面我和'Mark H'的两个答案,以了解我的意思。 – Saint 2010-09-01 20:46:04

1

你的问题并不能解释整个情况..但是,随着我对问题的理解,我可以提出以下答案: 根据目标客户群的位置(支持企业网络或NOT),可以使用各种路由选项,如UPnP,STUNTIPv6或其他一些NAT遍历选项,以便您可以通知客户端监听程序在哪里。应始终有一个中央注册服务器,Listener会通知它的位置以及在其环境中允许的通信模式。 XMPP服务器的使用对于这些目的来说是一个简单的选择,它可以解决大多数此类问题。一旦客户端从发现服务器查询侦听器的位置,它就可以直接连接到侦听器。

+0

非常感谢您的回答。我之前没有听说过这件事。 NAT穿越是个好主意,但现在我遇到了问题,因为我支持两台路由器 - “双重NAT”。我尝试使用这个UPnP库,但它不工作:)我仍然在尝试。 但它让我想到:为什么你说这应该是一个中央注册表服务器......如果服务器不动,那当然没有必要,对吧?客户可以直接发送数据到服务器? – Saint 2010-09-02 11:03:07

+0

如果有外部DMZ'd注册服务器的选项,并且您计划使用TCP(双工),请尝试通过服务器进行隧道传输(如果UPnP失败)。这种方法在服务器端可能会占用很少的带宽,但这是一个有保证的选项。 – Bhuvan 2010-09-05 00:59:08

+0

是的,我在考虑调谐,但在服务器上有外部IP是有点不可能的。双NAT不依赖于我。是否可以通过双重NAT对我的应用程序服务器进行调优? – Saint 2010-09-09 14:30:19

0

听起来就像你只是想在你的路由器上设置端口转发。在客户端连接的特定端口上建立传入连接时,路由器应将连接重定向到您在LAN上指定的计算机。 (通常是一个像192.168.x.x的IP)。这也应该是您的TcpListener正在侦听连接的IP地址。

如果您需要帮助为特定路由器设置它,您可以尝试portforward.com

+0

是的,端口转发它的解决方案,但我不确定在这种情况下。我可能会解释更多。 在我的comp是等待连接的服务器,但他不时想要发送一些信息给客户端。客户失控,例如在其他城市。我怎样才能在不改变路由器的情况下向他发送这个数据包? – Saint 2010-09-01 19:07:03

+0

只有先连接到客户端,才能向客户端发送任何内容。建立连接并接受它后(使用'tcpListener.AcceptTcpClient'或'.AcceptSocket'),使用接受的套接字发送数据。 – 2010-09-01 19:54:28

+0

嗯,但他的路由器呢? 我会有他的IP(btw外部或内部?)和端口,但例如它将是端口号7001.而他的路由器不接受连接在这个端口 - 对吗?(因为什么?默认这个端口它可能关闭) 该怎么办? – Saint 2010-09-01 20:42:09

相关问题