C# socket跨路由通讯

江南小鱼 2014-11-03 05:09:41
局域网通讯
局域网的一台PC机作为ServerSockt端,此PC机以及和它在一个路由的其他机器,都是静态分配IP地址,网段为194.194.194.x
另外,局域网安装了路由器,IP地址为192.168.0.11,在此wifi下的笔记本能够和194.194.194.x网段的pc机互联

现象
从194.194.194.x的pc机能发消息到192.168网段的客户端,反过来消息发不过去。
请问,socket(tcp协议)怎么解决跨路由通讯?
...全文
676 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南小鱼 2014-11-04
  • 打赏
  • 举报
回复
引用 28 楼 Z65443344 的回复:
其实就是交换机 先不纠结名字的问题,回答我25楼的问题,TPLink到底怎么接线的,哪个是WAN口,哪个是LAN口
网线插在TPLink的WAN口
江南小鱼 2014-11-04
  • 打赏
  • 举报
回复
引用 28 楼 Z65443344 的回复:
其实就是交换机 先不纠结名字的问题,回答我25楼的问题,TPLink到底怎么接线的,哪个是WAN口,哪个是LAN口
A、B、C和TPLink没一点关系! 拓扑图中的Switch是网路来源 这么说吧,比如有一台PC机(194.194.194.x)D,我拔掉它的网线,查到TPLink上,使得TPLink能够产生wifi供移动设备使用 A、B、C、1、2都运行Client,其中A、B、C(固定IP,194.194.194.x),1、2(动态IP,192.168.1.x) Server在194.194.194.x的一台服务器上
江南小鱼 2014-11-04
  • 打赏
  • 举报
回复
引用 25 楼 Z65443344 的回复:
也就是说,1,2接在LAN口,A,B,C接在WAN口? 还是说你的TPLink有多个WAN口,1,2各接到一个WAN口上? 2上运行的是server端,A上运行的是clint端?? 理论上从Aping2根本就ping不通才对
拓扑图就是我画的那种,A、B、C的网线不查找TPLink上,TPLink使用Hub上的一根网线,供移动设备连接使用。 Socket Server在和A、B、C一个网段的一台服务器上,监听登录的Socket Client,记录套接字,作为各个Socket Client通讯的依据 A、B、C以及Socket Server IP:194.194.194.x 1、2 IP:192.168.1.x
於黾 2014-11-04
  • 打赏
  • 举报
回复
其实就是交换机 先不纠结名字的问题,回答我25楼的问题,TPLink到底怎么接线的,哪个是WAN口,哪个是LAN口
江南小鱼 2014-11-04
  • 打赏
  • 举报
回复
引用 22 楼 Z65443344 的回复:
HUB中文名称是集线器 也就是内部单纯的把网线里面的线芯都并联在一起了而已 根本无法分组交换 所有网卡都是采用直连的方式接在一起了
我名字取的不正确,让您见笑了。 我图中的Hub是这么一个设备,机房到办公室一根网线,插入我称之为Hub的设备上,上面有很多口子,这间办公室的PC机能够把网线插到上面,实现上网。
於黾 2014-11-04
  • 打赏
  • 举报
回复
引用 24 楼 lovelj2012 的回复:
[quote=引用 21 楼 Z65443344 的回复:] 而且hub到底是个什么东西,我完全不理解 你这是从多么古老的书上抄来的东西啊 现在市面上根本就不存在这个产品了吧 这还是在交换机发明之前的产物 使用的根本不是TCP/IP协议 而是总线协议,使用竞争机制
哈哈,拓扑图是根据我的认识画的,没有抄书本 Hub我称之为转发器或者集线器,就是同一个办公室多台pc机网线连接的一个设备[/quote] 应该是switch才对吧,一个二层小交换机而已 如果真的仅仅是集线器,你这样接根本就不会通
於黾 2014-11-04
  • 打赏
  • 举报
回复
也就是说,1,2接在LAN口,A,B,C接在WAN口? 还是说你的TPLink有多个WAN口,1,2各接到一个WAN口上? 2上运行的是server端,A上运行的是clint端?? 理论上从Aping2根本就ping不通才对
江南小鱼 2014-11-04
  • 打赏
  • 举报
回复
引用 21 楼 Z65443344 的回复:
而且hub到底是个什么东西,我完全不理解 你这是从多么古老的书上抄来的东西啊 现在市面上根本就不存在这个产品了吧 这还是在交换机发明之前的产物 使用的根本不是TCP/IP协议 而是总线协议,使用竞争机制
哈哈,拓扑图是根据我的认识画的,没有抄书本 Hub我称之为转发器或者集线器,就是同一个办公室多台pc机网线连接的一个设备
江南小鱼 2014-11-04
  • 打赏
  • 举报
回复
引用 19 楼 lovelj2012 的回复:
[quote=引用 18 楼 Z65443344 的回复:] 你要记得,使用了路由器,就不再是局域网了,而是分内网和外网 那么你应该用外网和内网通信的思路去编程,而不是一味的纠结什么局域网 要么放弃点对点通信,统一使用服务器中转转发信息 要么学习一下NAT穿透的知识 而且你的应用中,还不完全是在两个局域网内的两台计算机通信, 而是其中一台在外网,另一台在内网 其实你只要区分出到底哪一台在外网,将外网的计算机开启侦听(作为服务端),内网计算机作为客户端去连接就能够连接上了 不要企图让外网的计算机作为客户端主动连接内网的计算机,不做NAT穿透根本就连接不上
感谢於黾! Client A可以发消息给Client 2 那么,我猜想Hub的地址和Client 2是一个IP段 Socket Server用于搜集客户端的套接字,作为各个Client通讯的依据 [/quote] Client A、Client B、Client C地址段是 194.194.194.x Client 1、Client 2是连TPLink,地址段是192.168.1.x Client A和Client 1,是不是可以认为是同一个局域网的两个子网? 还是,按照您的说法,路由之外称之为外网? 是通过我的Socket客户端发消息
於黾 2014-11-04
  • 打赏
  • 举报
回复
HUB中文名称是集线器 也就是内部单纯的把网线里面的线芯都并联在一起了而已 根本无法分组交换 所有网卡都是采用直连的方式接在一起了
於黾 2014-11-04
  • 打赏
  • 举报
回复
而且hub到底是个什么东西,我完全不理解 你这是从多么古老的书上抄来的东西啊 现在市面上根本就不存在这个产品了吧 这还是在交换机发明之前的产物 使用的根本不是TCP/IP协议 而是总线协议,使用竞争机制
於黾 2014-11-04
  • 打赏
  • 举报
回复
你要画拓扑图的话,涉及到Router的,起码要标出网段,这样才能看出到底哪根线插在LAN口,哪根线插在WAN口上 而且A能发消息给2,发的是什么消息,QQ消息吗???
江南小鱼 2014-11-04
  • 打赏
  • 举报
回复
引用 18 楼 Z65443344 的回复:
你要记得,使用了路由器,就不再是局域网了,而是分内网和外网 那么你应该用外网和内网通信的思路去编程,而不是一味的纠结什么局域网 要么放弃点对点通信,统一使用服务器中转转发信息 要么学习一下NAT穿透的知识 而且你的应用中,还不完全是在两个局域网内的两台计算机通信, 而是其中一台在外网,另一台在内网 其实你只要区分出到底哪一台在外网,将外网的计算机开启侦听(作为服务端),内网计算机作为客户端去连接就能够连接上了 不要企图让外网的计算机作为客户端主动连接内网的计算机,不做NAT穿透根本就连接不上
感谢於黾! Client A可以发消息给Client 2 那么,我猜想Hub的地址和Client 2是一个IP段 Socket Server用于搜集客户端的套接字,作为各个Client通讯的依据
於黾 2014-11-04
  • 打赏
  • 举报
回复
你要记得,使用了路由器,就不再是局域网了,而是分内网和外网 那么你应该用外网和内网通信的思路去编程,而不是一味的纠结什么局域网 要么放弃点对点通信,统一使用服务器中转转发信息 要么学习一下NAT穿透的知识 而且你的应用中,还不完全是在两个局域网内的两台计算机通信, 而是其中一台在外网,另一台在内网 其实你只要区分出到底哪一台在外网,将外网的计算机开启侦听(作为服务端),内网计算机作为客户端去连接就能够连接上了 不要企图让外网的计算机作为客户端主动连接内网的计算机,不做NAT穿透根本就连接不上
江南小鱼 2014-11-03
  • 打赏
  • 举报
回复
引用 14 楼 sp1234 的回复:
如果说到具体的应用软件,首先,客户端都会连到公共的服务器去进行业务操作,这时候如果客户端发消息给服务器、或者服务器发消息给客户端(注意这里指长连接,而不是短链接)都是几毫秒的事情,很快。 假设客户端A有消息要发给B,可以把消息给服务器,然后服务器就把消息给B了。也就是几十毫秒就到达对方了。 进一步,如果你把上述已经做起来了,基本的通讯完全连好了,有闲功夫的时候,才开始考虑更加“性能”或者更加“省资源”的改进方式。例如可以修改客户端登录机制,让客户端登录时,报告内部局域网测试结果,并且开一个局域网内动态端口用于接收内部消息。然后通讯时A会先从服务器获取B的部分局域网内部端口,然后先尝试访问B;如果访问超时,那么以后跟B的通讯就还是使用服务器。 QQ在tcp联通的情况下,还是会使用udp发送部分聊天消息,然后等待tcp的回应。这样的目的就是为了发消息快一点。同时QQ也会大量使用http方式。但是这一切的基础,都是先要保证业务连通,也就是先用最可靠的方式(而不是什么网上说的最快的方式)建立起来。如果连基本的稳定性都不能保证,那么什么就不能瞎试别的“技术”。
感谢【新闻界抹黑】大哥,能够不厌其烦的打下这么多字的回复!多谢! 从你的回复,又学到了一些东西,受益匪浅! 不过,我还是想搞清楚,局域网聊天软件,我描述的这种场景怎么解决通信的事情。 我再琢磨琢磨
  • 打赏
  • 举报
回复
90%是根本不能用的,剩下的90%是根本不稳定的 --> 90%是根本不能在多层交换网络下连通的,剩下的90%是根本不稳定的
  • 打赏
  • 举报
回复
连基本的稳定性都不能保证,你会看到很多人先去瞎掰什么“udp打洞”。可是你要是测试一下他们的实际的程序,90%是根本不能用的,剩下的90%是根本不稳定的。
  • 打赏
  • 举报
回复
如果说到具体的应用软件,首先,客户端都会连到公共的服务器去进行业务操作,这时候如果客户端发消息给服务器、或者服务器发消息给客户端(注意这里指长连接,而不是短链接)都是几毫秒的事情,很快。 假设客户端A有消息要发给B,可以把消息给服务器,然后服务器就把消息给B了。也就是几十毫秒就到达对方了。 进一步,如果你把上述已经做起来了,基本的通讯完全连好了,有闲功夫的时候,才开始考虑更加“性能”或者更加“省资源”的改进方式。例如可以修改客户端登录机制,让客户端登录时,报告内部局域网测试结果,并且开一个局域网内动态端口用于接收内部消息。然后通讯时A会先从服务器获取B的部分局域网内部端口,然后先尝试访问B;如果访问超时,那么以后跟B的通讯就还是使用服务器。 QQ在tcp联通的情况下,还是会使用udp发送部分聊天消息,然后等待tcp的回应。这样的目的就是为了发消息快一点。同时QQ也会大量使用http方式。但是这一切的基础,都是先要保证业务连通,也就是先用最可靠的方式(而不是什么网上说的最快的方式)建立起来。如果连基本的稳定性都不能保证,那么什么就不能瞎试别的“技术”。
江南小鱼 2014-11-03
  • 打赏
  • 举报
回复
瞧见这么一个解答,看起来很有道理,不知道怎么实现 http://bbs.csdn.net/topics/100030455 UDP打洞, 1:建立服务器(保存所有客户端信息) 2:建立客端(同时登陆服务器) 3:从服务器得到第三方的IP:222.222.222.222和PORT:1234; 4:例用得到的ADDRESS信息,向第三方发送信息. 主机A(192.168.0.2:1234)<----->路由(221,111,10,110:1234)-----------| | | 主机B(10.0.0.3:5678)<----->路由(60,111,111,12:5678)---------------| 这样就完成了不同网段的通迅.只要把信息发向对方所在ADDRESS信息就可以了. 主机绑定地址后,路由会记录相对应的信息.
江南小鱼 2014-11-03
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
客户端访问服务器,然后双方就能双向通讯了。如果客户端检测到网络断了,就会重连。 服务器从来不连客户端!
是的,服务器不连客户端。 服务器端只是起到监控作用,监控到所有在线的用户,把各个客户端的ip、port存储起来。 客户端点对点通讯,通讯的依据就是从服务器端获取对方的套接字
加载更多回复(11)