CSocket UDP 无法接收问题

deng335995 2009-06-25 03:22:46
很郁闷!硬件以UDP协议能通过www.ip138.com得到的我机子的IP 加上一个端口号发数据过来,我这边的服务器能收到。但是我用软件从另外一台在局域网上的能上网的机子发数据过来却什么也收不到,IP与端口号跟硬件那边一模一样。怎么回事?要怎么才能通信?说说怎么测试不在局域网的客户端与服务器通信,要怎么搭建环境。首先说一下我的程序在局域网是能相互通信没有任何问题,很头疼啊,老大要发彪了:“人家硬件能通信你软件为什么不行?”。现在我只要求服务器能收到数据。本人第一次发帖提问,跪求各位大大赐教,分不够可以再加!
...全文
260 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
deng335995 2009-06-26
  • 打赏
  • 举报
回复
也许是客户端所在局域网的服务器禁用的东西太多了吧,数据包根本没能从服务器出去,管网络的又不太配合很头痛。不管怎么样,先谢谢大家的指点!先想办法到拉有宽带的朋友那里,让他发都服务器看看收不收得到。
他那里从猫进来就连他的电脑了,IP显示也是从www.ip138.com得到的一样,不知道算不算是公网IP呢?
刚刚凉 2009-06-26
  • 打赏
  • 举报
回复
下面是我在回复帖子http://topic.csdn.net/u/20090625/16/fc2f30f3-6504-4865-b9c8-b78a04295590.html?89109#replyachor 说的 你看看对你有没有参考价值 实在不愿意打字
发表于:2009-06-25 16:59:058楼 得分:0
你这个情况应该是这样:
你的电脑是在一个路由器下划分的一个内部局域网。你的ip 192.168.0.178 是你在这个局域网内部的ip,而你们这个内部局域网所有电脑对外的IP都是59.42.94.235 ,这个ip是在路由器那设定的,问你们网管就知道了。所以你上www.ip38.com时,他看到的是你们对外的IP59.42.94.235 。你从里往外通信时,先发给路由器,路由器在发给你通信的目标,这样很明确;反之,如果外网给你这个局域网内你的电脑通信,它只能发给你们这个局域网对外的ip59.42.94.235 ,因为外网只知道这个,发到这个ip的某个端口后,路由器就糊涂了,因为它下边有好多个内网ip,它不知道要转发给谁,所以就需要你进行端口映射了,就是指定如果路由器(59.42.94.235 )收到外边发到你指定端口映射的端口的数据,就直接转发给你的这台电脑(192.168.0.178 )。
至于怎么进行端口映射,那看你有没有权限拉,你在地址栏输入192.168.0.1 或者192.168.0.3 ,用户名是admin 密码是admin ,如果能进去的话,那么就能配置端口映射,如果不能就找网管把。配置端口映射,你上网上查查吧。

还有种情况,我之前作工程遇到过,就是如果你从内往外从某个端口向外发数据,然后在极短的时间内(我记得当初测试过,这个时间记得好像小于1秒),在该端口能收到返回的数据,那么就不用配置端口映射了,这个现在我也没明白,自己的解释就是路由器由短暂的“记忆“功能,如果你从某个端口发出数据,然后短时间内收到数据,那么它就会自动转发给刚刚发出数据的电脑。

还有种情况 是外边往你这发数据,如果发给你不是特殊的端口,比如80或者qq用那个端口,那么可能你就收不到数据,因为被屏蔽了,这样一般都是为了防止攻击,或者是因为路由在处理时候有端口优先级的,如果不是常用端口,那么可能排到最后,这样就可能无法得到处理,进而你收不到数据。
na_he 2009-06-26
  • 打赏
  • 举报
回复
就是说你模拟硬件的工作机制工作不能成功了。实在不行做个tcp/IP的连接测试一下网络了。
skyxie 2009-06-26
  • 打赏
  • 举报
回复
1. 程序在局域网能互通, 说明程序没有问题.

2. 跨网络程序不能使用,说明这个网络有问题! 找网管解决!

要想自己解决, 建议先看看网络方面的资料. 多的就不说了...
deng335995 2009-06-26
  • 打赏
  • 举报
回复
服务器是能ping 通IP:61.144.79.124的,而它是客户端在www.ip138.com得到的所在机子IP,按理说就是
61.144.79.124与服务器间(59.42.94.235)的路由是通的。两个IP之间相互通信应该没问题吧?

硬件既然能发数据到59.42.94.235,软件却不能很没道理啊!
oyljerry 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 skyxie 的回复:]
引用 19 楼 oyljerry 的回复:
引用 17 楼 skyxie 的回复:
如果这两个网接不同的路由器,然后两个路由器之间再通信...
-----
即使这样也不需要nat啊~ 加条路由规则,直接就转发过去了~

当然,特殊情况也可能nat (比如server的网络中存在多个192.168.27.0/24子网时)


路由规则不会为了你,而把对应的包转发到你指定的IP上吧..


路由规则当然只需要加网关的ip就可以了.......
上面的例子,普通就是如下两条路由规则.cl…
[/Quote]
我的意思是路由器不会因为你这两个网要通信而加路由.
skyxie 2009-06-25
  • 打赏
  • 举报
回复
不好意思,打错了,是telnet
deng335995 2009-06-25
  • 打赏
  • 举报
回复
没则了,telenet命令我的机子用不了郁闷,居然提示不是内部或外部命令
skyxie 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 oyljerry 的回复:]
引用 17 楼 skyxie 的回复:
如果这两个网接不同的路由器,然后两个路由器之间再通信...
-----
即使这样也不需要nat啊~ 加条路由规则,直接就转发过去了~

当然,特殊情况也可能nat (比如server的网络中存在多个192.168.27.0/24子网时)


路由规则不会为了你,而把对应的包转发到你指定的IP上吧..
[/Quote]

路由规则当然只需要加网关的ip就可以了.......
上面的例子,普通就是如下两条路由规则.client和server的两个子网就可以互联互通了~

192.168.0.1 上的路由
route add 192.168.27.0 mask 255.255.255.0 192.168.27.1

192.168.27.1 上的路由
route add 192.168.0.0 mask 255.255.255.0 192.168.0.1
skyxie 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 deng335995 的回复:]
1、不是抓包,硬件上发送时就写它要发送到哪个IP与端口号。
2、telenet 192.168.0.178 8080 是DOS 下的命令吗,我用不了。

按理说硬件能通过59.42.94.235 发送到服务器端了,有什么理由软件找不到它,服务器端那边做了端口映射了
[/Quote]
如果nat没有做好,就可能丢包~

在client机器上 开始 -- 运行 -- cmd, 然后敲 telenet 192.168.0.178 8080

oyljerry 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 skyxie 的回复:]
如果这两个网接不同的路由器,然后两个路由器之间再通信...
-----
即使这样也不需要nat啊~ 加条路由规则,直接就转发过去了~

当然,特殊情况也可能nat (比如server的网络中存在多个192.168.27.0/24子网时)
[/Quote]
路由规则不会为了你,而把对应的包转发到你指定的IP上吧..
deng335995 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 skyxie 的回复:]
引用 9 楼 deng335995 的回复:
回8楼:
1、硬件的IP是不固定的,如果我的服务器端没有收到它发过来的数据之前是根本不知道它的IP,它发给服务器端的IP确实是:59.42.94.235 端口:8080 。
2、客户端上ping 不通192.168.0.178 ,ping 百度也不通,可以肯定的是能上网;服务器上ping客户端 192.168.27.21 不通,ping 百度则通。
好象我在网上看到过ping不通不代表不能通信,只是有些是被服务器拦截,限制了ping 的功能而已 …
[/Quote]

1、不是抓包,硬件上发送时就写它要发送到哪个IP与端口号。
2、telenet 192.168.0.178 8080 是DOS 下的命令吗,我用不了。

按理说硬件能通过59.42.94.235 发送到服务器端了,有什么理由软件找不到它,服务器端那边做了端口映射了
skyxie 2009-06-25
  • 打赏
  • 举报
回复
如果这两个网接不同的路由器,然后两个路由器之间再通信...
-----
即使这样也不需要nat啊~ 加条路由规则,直接就转发过去了~

当然,特殊情况也可能nat (比如server的网络中存在多个192.168.27.0/24子网时)
oyljerry 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 skyxie 的回复:]
引用 14 楼 oyljerry 的回复:
引用 13 楼 skyxie 的回复:
引用 11 楼 wenxy1 的回复:
服务器端:
IP              192.168.0.178
掩码              255.255.255.0
默认网关          192.168.0.1


客户端:
IP              192.168.27.21
掩码              255.255.255.0
默认网关          192.168.27.1

路由也要映射到网关的端口,因为另一个内网机器只能发送到网关ip+端口


无语了~~~~难道不成你也觉得…
[/Quote]
如果这两个网接不同的路由器,然后两个路由器之间再通信...
skyxie 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 oyljerry 的回复:]
引用 13 楼 skyxie 的回复:
引用 11 楼 wenxy1 的回复:
服务器端:
IP 192.168.0.178
掩码 255.255.255.0
默认网关 192.168.0.1


客户端:
IP 192.168.27.21
掩码 255.255.255.0
默认网关 192.168.27.1

路由也要映射到网关的端口,因为另一个内网机器只能发送到网关ip+端口
[/Quote]

无语了~~~~难道不成你也觉得要做nat?!
oyljerry 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 skyxie 的回复:]
引用 11 楼 wenxy1 的回复:
服务器端:
IP              192.168.0.178
掩码              255.255.255.0
默认网关          192.168.0.1


客户端:
IP              192.168.27.21
掩码              255.255.255.0
默认网关          192.168.27.1

client, server都在内网里,要互相通信,不做NAT映射肯定不行的。


不需要nat吧~ 只需要192.168.0.1和192.168.27.1加上正确的路由就ok了
[/Quote]
路由也要映射到网关的端口,因为另一个内网机器只能发送到网关ip+端口
skyxie 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wenxy1 的回复:]
服务器端:
IP 192.168.0.178
掩码 255.255.255.0
默认网关 192.168.0.1


客户端:
IP 192.168.27.21
掩码 255.255.255.0
默认网关 192.168.27.1

client, server都在内网里,要互相通信,不做NAT映射肯定不行的。
[/Quote]

不需要nat吧~ 只需要192.168.0.1和192.168.27.1加上正确的路由就ok了
skyxie 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 deng335995 的回复:]
回8楼:
1、硬件的IP是不固定的,如果我的服务器端没有收到它发过来的数据之前是根本不知道它的IP,它发给服务器端的IP确实是:59.42.94.235 端口:8080 。
2、客户端上ping 不通192.168.0.178 ,ping 百度也不通,可以肯定的是能上网;服务器上ping客户端 192.168.27.21 不通,ping 百度则通。
好象我在网上看到过ping不通不代表不能通信,只是有些是被服务器拦截,限制了ping 的功能而已
[/Quote]

1. "它发给服务器端的IP确实是:59.42.94.235" 这个是怎么发现的, 抓包?
2. "ping不通不代表不能通信" 这个是对的, 网管可能限制了ping功能
那么在客户机上 "telenet 192.168.0.178 8080" 呢? 如果telnet 8080 端口也不通, 那就表明你的客户机到server肯定不通了.
Wenxy1 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 deng335995 的回复:]
服务器端:
IP 192.168.0.178
掩码 255.255.255.0
默认网关 192.168.0.1


客户端:
IP 192.168.27.21
掩码 255.255.255.0
默认网关 192.168.27.1

从www.ip138.com上得到服务器端的IP是59.42.94.235
硬件能通过UDP协议发送数据到59.42.94.235 端口:8080
服务器端的软件监听的端口:8080
它确实收到硬件发来的信息了,软件发的就收不…
[/Quote]

client, server都在内网里,要互相通信,不做NAT映射肯定不行的。
Wenxy1 2009-06-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 deng335995 的回复:]
我想问一下,QQ它的客户端无论在公网还是在内网,它都能连上服务器,不会每个内网都要设置NAT映射吧?万一没有用不了?
[/Quote]

QQ的服务器有公网IP。

QQ 去主动连接 QQ服务器,当然可以。
加载更多回复(9)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧